java并发编程
volatile变量修饰符 使用限制
1.对变量的写操作不依赖于当前值
2.该变量没有包含在具体其他变量的不等式中
作用:
Volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。
synchronized同步(互斥锁机制):
1.如果同一个方法中有两个以上的线程,则每个线程都有自己的局部变量拷贝
2.类的每个实例都有自己对象级别的锁
当一个线程访问实例对象中的synchronized同步代码块或同步方法时,该线程便获取了该实例的对象级别锁,其他线程这时如果要访问synchronized同步代码块或同步方法,便需要阻塞等待,直到前面的线程从同步代码块或方法中退出,释放掉了该对象级别锁
3.同一个类中不同实例对象,没有互斥关系,相互之间没有影响
4.持有对象级别的锁会阻塞掉同一对象中所有synchronized的方法(包括synchronized代码块上的锁)
5.静态方法的synchronized锁与实例方法的锁不会互斥
volatile变量修饰符 使用限制
1.对变量的写操作不依赖于当前值
2.该变量没有包含在具体其他变量的不等式中
作用:
Volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。
synchronized同步(互斥锁机制):
1.如果同一个方法中有两个以上的线程,则每个线程都有自己的局部变量拷贝
2.类的每个实例都有自己对象级别的锁
当一个线程访问实例对象中的synchronized同步代码块或同步方法时,该线程便获取了该实例的对象级别锁,其他线程这时如果要访问synchronized同步代码块或同步方法,便需要阻塞等待,直到前面的线程从同步代码块或方法中退出,释放掉了该对象级别锁
3.同一个类中不同实例对象,没有互斥关系,相互之间没有影响
4.持有对象级别的锁会阻塞掉同一对象中所有synchronized的方法(包括synchronized代码块上的锁)
5.静态方法的synchronized锁与实例方法的锁不会互斥