并发编程-基础知识

什么是线程安全

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

原子性

  • 竞态条件(Race Condition):不恰当的执行时序导致不正确结果
  • 常见竞态条件类型:先检查后执行(Check-Then-Act)
  • 延迟初始化中的竞态条件
  • 通过添加线程安全的状态变量(原子变量)可以达到线程安全的目的【但是对于多变量有问题】

加锁机制

要保持状态的一致性,就需要在单个原子操作中更新所有相关的状态变量

1、内置锁

  • 同步代码块(Synchronized Block):作为锁的对象引用 + 锁保护的代码块
  • 同步方法:锁是方法调用所在对象
  • 静态同步方法:以class对象作为锁

2、重入

  • 一个线程获取由他自己持有的锁,请求会成功,说明可以重入
  • 重入意味着获取锁的粒度是线程,不是调用

用锁来保护状态

  • 对于多线程访问的可变状态变量,在访问他时需要持有同一个锁,这时我们称状态变量是由这个锁保护的
  • 所有方法都加锁也解决不了竞态条件的问题,还会引入性能问题

活跃性与性能

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

推荐阅读更多精彩内容

友情链接更多精彩内容