2.安全性

java中多线程同步包括:

  • synchronized
  • 显示锁
  • volatile
  • 原子变量

之所以要使用同步,是因为线程间需要 <b>共享</b> <b>可变</b>变量。
要修复这个问题就有三个思路:

  • 不要共享这个变量
  • 把变量改为不可变对象
  • 使用同步

线程安全的概念

当多个线程并行访问某个类时,不管环境采用何种调度方式或者线程以什么样的顺序交替执行,在主调用类中不需要使用任何同步策略,这个类都可以表现出正确的行为,就可以称该类为线程安全类。

tips:无状态类一定是线程安全的(无状态:它既不包含任何域,也不包含对其他任何类的域的引用,计算过程中的临时状态仅存在线程栈上的局部变量中,而且只能由正在执行的线程访问)

sychornized

  • static方法会以class对象作为锁
  • 普通方法以对象本身作为锁

可重入锁

计数器方式,以线程为维度,不是以调用为维度。
如:子类和父类方法都有加锁,子类调用super。xxx时,如果锁不可重复,他永远也等不到那把锁,因为已经被自己持有了。

尽量细化锁粒度,对于长时间io操作的动作不要加锁!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容