Java 锁

作者: 旋转马达 | 来源:发表于2018-02-26 11:34 被阅读0次

1:锁存在的问题
1)在多线程竞争锁的情况下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。而且在上下文切换的时候,cpu之前缓存的指令和数据都将失效,对性能有很大的损失。
2)一个线程持有锁会导致其它所有需要此锁的线程挂起直至该锁释放。
3)如果一个优先级高的线程等待一个优先级低的线程释放锁会导致导致优先级反转(Priority Inversion),引起性能风险。
2:悲观锁与乐观锁
独占锁是一种悲观锁,synchronized就是一种独占锁,会导致其它所有需要锁的线程挂起,等待持有锁的线程释放锁。而另一个更加有效的锁就是乐观锁。
所谓乐观锁就是,每次不加锁而是假设没有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止。

相关文章

网友评论

      本文标题:Java 锁

      本文链接:https://www.haomeiwen.com/subject/ddbexftx.html