Java锁机制总结

Posted sweetorangezzz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java锁机制总结相关的知识,希望对你有一定的参考价值。

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锁机制总结的主要内容,如果未能解决你的问题,请参考以下文章

Java:java学习笔记之锁机制的简单理解和使用

Java:java学习笔记之锁机制的简单理解和使用

Java锁机制总结

Java锁机制梳理与详细介绍

Java多线程 —— 线程并发库之锁机制

深入浅出 Java Concurrency (15): 锁机制 part 10 锁的一些其它问题