Java教程

Java 锁机制与线程调优

本文主要是介绍Java 锁机制与线程调优,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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 锁机制与线程调优的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!