首页 > 编程语言 > 详细

Java 锁机制与线程调优

时间:2021-08-30 07:55:52      阅读:8      评论:0      收藏:0      [点我收藏+]

1. 为什么使用锁?

  多线程操作带来的问题?

    • 访问冲突;
    • 锁竞争;
      • 死锁;
      • 锁的粒度;
    • 上下文切换开销;
    • 同步/内存拷贝开销等;

2. 线程安全

  • Java内存模型(JMM)
    • working memory & main memory
  • 原子性;
  • 可见性;
  • 有序性;
    • happens before原则
  • 代码重排;
  • 内存屏障;
  • volatile;
  • 锁;

3. Java内存模型

技术分享图片

4. 原子性 

  • byte/short/int/char/boolean/float  读写原子性;
  • long/double(64位)读写分两次32位操作,非原子性; 
  • int i++等组合操作,非原子性;
  • synchronized同步块内的操作,具有原子性;

5. 可见性

  • final
    • 被final修饰的字段初始化完成可确保可见性;
  • volatile
    • 读写volatile字段确保可见性;
  • synchronized
    • 同步块内读写字段确保可见性;
  • happens-before
    • 符合happens-before次序的可见性;

 

      

6. 有序性

Java 锁机制与线程调优

原文:https://www.cnblogs.com/naray/p/13072982.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!