线程安全性

线程安全定义:当多个线程访问某个类时,这个类始终都能表现出正确的行为,那么就称这个类是线程安全的

一个对象是否线程安全的,取决于它是否能被多个线程访问;

无状态的对象一定是线程安全的;

JAVA同步机制

  • synchronized
  • volatile
  • Explicit Lock显式锁(JUC--Lock)
  • 原子变量
共享与可变
  • 共享意味着变量可以由多个线程同时访问

  • 可变意味着变量值在生命周期内可以发生变化

首先需要理解线程安全的两个方面:执行控制和内存可见

  • 执行控制的目的是控制代码执行(顺序)及是否可以并发执行
  • 内存可见(Memory Visibility)控制的是线程执行结果在内存中对其它线程的可见性

解决线程安全的主要手段

  • 将对象设计为无状态对象
  • 使用局部对象
  • 并发访问资源时使用锁

线程同步会增加共享内存总线上的通信量,总线的带宽是有限的,并且所有的处理器都将共享这条总线

编写并发程序时,一种正确的编程方法是:首先使代码正确运行,然后再提高代码的速度;

【参考资料】

https://www.jianshu.com/p/46f72d52a5be

results matching ""

    No results matching ""