Java并发基础(三)-线程安全

本文介绍了线程安全的概念及其在Java中的应用,详细解释了不同级别的线程安全性,并提供了多种实现线程安全的方法,包括互斥同步、非阻塞同步及线程本地存储等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 什么是线程安全

如果一个对象可以安全的被多个线程同时使用,那么它就是线程安全的


当多个线程访问一个对象的时候,如果不考虑这些线程在运行时环境下的调度和交替执行,也不需要额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象就是线程安全的。

2. Java中的线程安全

根据线程安全的安全程度由强至弱来排序,可以分为5类:

  • 不可变
  • 绝对线程安全
  • 相对线程安全
  • 线程兼容
  • 线程对立

3. 线程安全的实现方法

  • 互斥同步,
    • synchronized
    • ReentrantLock 重入锁
  • 非阻塞同步,基于冲突检测的乐观并发策略,先进行操作,如果没有其他线程竞争共享数据,就操作成功了。否则,产生冲突,再采用补偿措施(最常见的就是不断重试),这种不需要将线程挂起,为非阻塞。这些涉及到处理器指令
    • 测试并设置(Test-and-Set)
    • 获取并增加(Fetch-and-Increment)
    • 交换(swap)
    • 比较并交换(Compare-and-Swap CAS)
    • 枷锁链接/条件存储(Load-LInked/Store-Conditional LL/SC)
  • 无同步方案
    • 可重入代码 这种代码叫纯代码,可以在代码执行的任何时刻中断他,转而执行另一段代码,但是,回来之后,并不会出现任何错误。
    • 线程本地存储 ThreadLocal

线程安全这块深究下去比较难。建议去看下深入理解JVM一书。

参考资料

  • 深入理解JVM
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值