JAVA并发笔记

  • synchronized 同步语句块的实现使用的是 monitorenter 和 monitorexit 指令,当执行 monitorenter 指令时,线程试图获取锁也就是获取 对象监视器 monitor 的持有权;

    • 另外,wait/notify等方法也依赖于monitor对象,这就是为什么只有在同步的块或者方法中才能调用wait/notify等方法,否则会抛出java.lang.IllegalMonitorStateException的异常的原因。
  • 静态 synchronized 方法和非静态 synchronized 方法之间的调用互斥么?不互斥!如果一个线程 A 调用一个实例对象的非静态 synchronized 方法,而线程 B 需要调用这个实例对象所属类的静态 synchronized 方法,是允许的,不会发生互斥现象,因为访问静态 synchronized 方法占用的锁是当前类的锁,而访问非静态 synchronized 方法占用的锁是当前实例对象锁。
版权声明:程序员胖胖胖虎阿 发表于 2023年9月3日 上午4:24。
转载请注明:JAVA并发笔记 | 胖虎的工具箱-编程导航

相关文章

暂无评论

暂无评论...