java 多线程学习 4 synchronized 关键字解析

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 需要注意的几个问题:

  1. 与Monitor关联的对象不能为空
  2. synchronized 作用域太大
  3. 不同的monitor企图锁相同的方法
  4. 多个锁交叉导致死锁
  5. This Monitor 和Class Monitor 混用
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容