https://pdai.tech/md/java/thread/java-thread-x-lock-all.html#_6-独享锁-排他锁-vs-共享锁

https://blog.csdn.net/qq_42764468/article/details/123741597

问题:

1、Semaphore有什么作用?

2、CyclicBarrier和CountDownLatch的用法及区别

3、三个线程a、b、c并发运行,b,c需要a线程的数据怎么实现?

4、怎么控制同一时间只有 3 个线程运行?

1\. 独占锁

独占锁也叫排他锁、互斥锁、独享锁,是指锁在同一时刻只能被一个线程所持有。一个线程加锁后,任何其他试图再次加锁的线程都会被阻塞,直到持有锁线程解锁。通俗来说,就是共享资源某一时刻只能有一个线程访问,其余线程阻塞等待。

如果是公平地独占锁,在持有锁线程解锁时,如果有一个以上的线程在阻塞等待,那么最先抢锁的线程被唤醒变为就绪状态去执行加锁操作,其他的线程仍然阻塞等待。

java中的synchronized内置锁和ReentrantLock显式锁都是独占锁。

2\. 共享锁

共享锁就是在同一时刻允许多个线程持有的锁。当然,获得共享锁的线程只能读取临界区的数据,不能修改临界区的数据。