Java中volatile和transient的区别
volatile关键字用于多线程环境中,多个线程同时读写同一个变量。volatile关键字将更改直接刷新到主内存,而不是CPU缓存。
另一方面,transient关键字用于序列化。标记为transient的字段不能成为序列化和反序列化的部分。如果我们不想保存任何变量的值,则可以使用transient关键字修饰该变量。
| 序号 | 关键字 | Volatile | Transient |
|---|---|---|---|
| 1 | 基础 | volatile关键字用于将更改直接刷新到主内存 | transient关键字用于在序列化过程中排除变量 |
| 2. | 默认值 | volatile变量不会初始化为默认值。 | 在反序列化期间,transient变量将初始化为默认值 |
| 3 | 静态 | volatile可以与静态变量一起使用。 | transient不能与static关键字一起使用 |
| 4 | final | volatile可以与final关键字一起使用 | transient不能与final关键字一起使用 |
Transient示例
// A sample class that uses transient keyword to
// skip their serialization.
class TransientExample implements Serializable {
transient int age;
// serialize other fields
private String name;
private String address;
// other code
}Volatile示例
class VolatileExmaple extends Thread{
boolean volatile isRunning = true;
public void run() {
long count=0;
while (isRunning) {
count++;
}
System.out.println("Thread terminated." + count);
}
public static void main(String[] args) throws InterruptedException {
VolatileExmaple t = new VolatileExmaple();
t.start();
Thread.sleep(2000);
t.isRunning = false;
t.join();
System.out.println("isRunning set to " + t.isRunning);
}
}
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP