实现线程安全的方法

3 篇文章 0 订阅

1、互斥同步

互斥同步是最常见的一种并发正确性保障方法,一般使用Synchronized和JUC包下的可重入锁
(即ReentrantLock和ReentrantReadWriterLock中的WriterLock)
互斥同步是一种悲观的并发策略

2、非阻塞同步

非阻塞同步是基于冲突检测的乐观并发策略。
采用CAS算法实现的同步操作,常见的有ReentrantReadWriterLock中的ReadLock、原子类系列。

3、无同步方案

可重入代码
不依赖存储在堆上的数据和公用的系统资源,不调用非可重入的方法等。
线程本地存储(ThreadLocal)
使用线程本地变量ThreadLocal。

补充

悲观的并发策略
在没有正确的同步措施情况下,对数据的每一次操作都会出现问题,无论共享数据是否真的会出现竞争,
都进行加锁、用户态和内核态切换、维护锁计数器和检查是否有被阻塞的线程需要唤醒的操作。
乐观的并发策略
先进行操作,如果没有其他线程竞争共享数据,即操作成功;如果有其他线程竞争共享数据,
产生了冲突,则采取补偿措施(不断重试,直到成功),这种并发策略大多不需要把线程挂起。
乐观的并发策略通常采用CAS算法实现,Java通过使用ra.jar包下的Unsafe类来实现CAS操作。
Unsafe类不是用户可以直接使用的类(使用反射机制可以直接使用),但是Java提供了许多
采用CAS操作的类,如原子类等。Java中的CAS操作使用的是CAS指令,即Compare-And-Swap,
这个操作是一个原子性的操作。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值