Java线程安全的实现方法

当我们说线程安全的时候,我们到底在说什么?

Google上给出的概念是:如果一个对象能被多个线程安全的同时使用,那该对象就是安全的。《Java Concurrency Practice》一书中给出的定义是:当多个线程访问同一个对象时,如果不考虑这些线程在运行时环境如何调度和交替执行,也不需要额外的同步,或者在调用方进行其他任何的协调操作,调用该对象都能得到正确的结果,那该对象就是线程安全的。


Java中线程安全的实现方式:

1. 悲观锁:synchronized关键字,lock 都属于悲观锁。

悲观锁是指,一个线程在访问某对象时,必须对对象加锁禁止其他对象的访问或者修改,否则假定一定会出现错误。很显然,该假设太强,所以会对系统的效率造成一定的损失,尤其是在多读的环境中。

2.乐观锁:

乐观锁是指,线程对更新保持一个乐观的态度,即假设修改某对象不会出现同步错误而不加锁,而出现同步错误再返回错误。错误检测的实现主要通过版本号的比较来实现。Hibernate框架中,可以选择事务加锁类型为乐观锁还是悲观锁。


3.volatile关键字

volatile关键字主要保证了有序性和可见性,但是对操作的原子性并不能保证,所以在使用volatile关键字替代锁机制的时候,需要两个条件:即对volatile变量的修改既不取决于变量的当前状态,也不取决于程序的当前状态。


4.concurrent包内的其他线程安全的类:如原子类,concurentHashMap等等

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值