synchronized关键字用于声明同步方法或者同步代码块,下面是synchronized的三种使用方式。
//同步方法
public synchronized void sync(){
this.close = true;
interrupt();
}
//静态同步方法
public static synchronized void syncStatic(){
this.close = true;
interrupt();
}
Object MUTEX = new Object()
public void sync1() {
sychronized(MUTEX) {
//同步代码块
}
}
synchronized 关键字包括monitor enter和monitor exit两个JVM指令,它能够保证在任何时候任何线程执行到monitor enter成功之前都必须从主内存中获取数据,而不是缓存中,保证了数据的一致性,在monitor exit运行成功之后,共享变量被更新后的值必须刷入主内存。
使用sychronized 需要注意的几个问题:
- 与Monitor关联的对象不能为空
- synchronized 作用域太大
- 不同的monitor企图锁相同的方法
- 多个锁交叉导致死锁
- This Monitor 和Class Monitor 混用
网友评论