读锁跟写锁的区别
本文来源于翁舒航的博客,点击即可跳转原文观看!!!(被转载或者拷贝走的内容可能缺失图片、视频等原文的内容)
若网站将链接屏蔽,可直接拷贝原文链接到地址栏跳转观看,原文链接:https://www.cnblogs.com/wengshuhang/p/9866459.html
读锁:读读不互斥
写锁:独占
lock下有读写锁 ReenTrantReadWriteLock
synchronized 是独占的
1.Java并发库中ReetrantReadWriteLock实现了ReadWriteLock接口并添加了可重入的特性
2.ReetrantReadWriteLock读写锁的效率明显高于synchronized关键字
3.ReetrantReadWriteLock读写锁的实现中,读锁使用共享模式;写锁使用独占模式,换句话说,读锁可以在没有写锁的时候被多个线程同时持有,写锁是独占的
4.ReetrantReadWriteLock读写锁的实现中,需要注意的,当有读锁时,写锁就不能获得;而当有写锁时,除了获得写锁的这个线程可以获得读锁外,其他线程不能获得读锁
关于lock的详细进阶内容可看我的另一篇博客
long long after:
补充: 锁,这种东西其实就是为了保护数据不被并发给 搞炸了, 然而, 当真正拥有极大量数据并发的时候, 锁其实已经满足不了 一些场景了, 因为会造成大量 的资源请求的竞争,只有一个线程抢到资源, 其他大量的请求都等着, 这样无疑对其他请求来说 是一个很慢的 响应。
可以用其他的方式来解决锁的问题, 比如事后的补偿机制。 至于该不该用锁,其实也应该根据现场的实际情况来抉择。 如果 锁的 速度比其他方式的响应速度 更快 或者差不多,那其实也没必要用其他方式来做,还是得看实际的情况。