Java 锁

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容