Java锁机制总结

2021-05-06 19:27

阅读:555

标签:阶段   轻量   orange   count   实现   总结   其他   允许   动作   

synchronzied

CountDownLatch 【 倒计时闩锁 】

https://www.cnblogs.com/sweetorangezzz/p/13186587.html

当计数为0的时候,下一步的动作实施者是main函数

CyclicBarrier 【 篱栅 】

达到一定计数,下一步动作实施者是“其他线程”。

Semaphore 【信号标】

Semaphore与CountDownLatch相似,不同的地方在于Semaphore的值被获取到后是可以释放的,并不像CountDownLatch那样一直减到底。它也被更多地用来限制流量,类似阀门的 功能。如果限定某些资源最多有N个线程可以访问,那么超过N个主不允许再有线程来访问,同时当现有线程结束后,就会释放,然后允许新的线程进来

Phaser 【阶段器】

https://www.cnblogs.com/sweetorangezzz/p/13188210.html

Phaser它也被称为“阶段器”,可以用它来控制多线程分阶段共同完成的问题

Exchanger 【交换器】

Exchanger用于进行线程间的数据交换

LockSupport 【锁支持】

https://www.cnblogs.com/sweetorangezzz/p/13186874.html

主要是为了阻塞和唤醒线程用的

ReentrantReadWriteLock 【可重入读写锁】

https://www.cnblogs.com/sweetorangezzz/p/13186796.html

现实中有这样一种场景:对共享资源有读和写的操作,且写操作没有读操作那么频繁。在没有写操作的时候,多个线程同时读一个资源没有任何问题,所以应该允许多个线程同时读取共享资源;但是如果一个线程想去写这些共享资源,就不应该允许其他线程对该资源进行读和写的操作了

ReentrantLock

https://www.cnblogs.com/sweetorangezzz/p/13189193.html

https://www.cnblogs.com/sweetorangezzz/p/13189170.html

总结:

  1. 什么是共享锁和排它锁

    共享锁就是允许多个线程同时获取一个锁,一个锁可以同时被多个线程拥有。

    排它锁,也称作独占锁,一个锁在某一时刻只能被一个线程占有,其它线程必须等待锁被释放之后才可能获取到锁。

  2. ReentrantReadWriteLock 、ReentrantLock都 通过 sync 实现了 排他锁

  3. CountDownLatch 、Semaphore、CyclicBarrier 通过 sync 实现了 共享锁

  4. synchronzied 是 JDK 内部实现的锁机制,无锁 ---> 偏向锁 ---> 自旋锁(轻量级锁)---> 重量级锁

Java锁机制总结

标签:阶段   轻量   orange   count   实现   总结   其他   允许   动作   

原文地址:https://www.cnblogs.com/sweetorangezzz/p/13189247.html


评论


亲,登录后才可以留言!