[Java 多线程] 变量可见性
2010-11-29 11:05
197 查看
JVM 保证变量的读,写操作是原子的,但是没有保证变量的可见性。
因此:下面的代码不是线程安全的.
public class MutableInteger {
private int value;
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
}
一个线程可能修改了value 的值,但是另外的线程不能读到value 最新的值.
public class MutableInteger {
private int value;
//保证立刻可以读到最新的修改
public synchronized int getValue() {
return value;
}
//保证立刻可以写入最新的修改
public synchronized void setValue(int value) {
this.value = value;
}
}
加锁可以保证可见性和原子性; volatile 变量只能保证可见性.
因此:下面的代码不是线程安全的.
public class MutableInteger {
private int value;
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
}
一个线程可能修改了value 的值,但是另外的线程不能读到value 最新的值.
public class MutableInteger {
private int value;
//保证立刻可以读到最新的修改
public synchronized int getValue() {
return value;
}
//保证立刻可以写入最新的修改
public synchronized void setValue(int value) {
this.value = value;
}
}
加锁可以保证可见性和原子性; volatile 变量只能保证可见性.
相关文章推荐
- Java 多线程(四) 多线程访问成员变量与局部变量
- 关于Java变量的可见性问题
- Java之多线程内存可见性_1
- Java之多线程内存可见性_2(synchronized实现可见性代码)
- 张孝祥java多线程视频笔记----线程范围内共享变量
- 十一、初学Java多线程:使用Synchronized块同步变量
- java多线程(对象和变量的并发访问)
- Java多线程之volatile变量
- java多线程之内存可见性
- 玩转java多线程学习篇二 实例变量与线程安全
- java进阶(七)------多线程---多线程操作同一变量
- JAVA 多线程对成员变量与局部变量的影响
- 静态变量、实例变量、局部变量在多线程环境下的线程安全问题 java 多线程
- java多线程之内存可见性
- 【Java多线程编程核心技术】2.对象及变量的并发访问(下)-笔记总结
- Java多线程中static变量的使用
- Java多线程之线程的可见性(二)
- Java多线程复习与巩固(八)--原子性操作与原子变量
- Java多线程之间通信——修改对象中的成员变量
- Java多线程之内存可见性