1、java中,共享锁有哪些

Java 中,常见的共享锁包括读写锁(ReentrantReadWriteLock)和计数器(CountDownLatch、CyclicBarrier、Semaphore 等)等。

1)读写锁

读写锁是一种特殊的锁,它允许多个线程同时读取共享资源,但只允许一个线程写入共享资源。ReentrantReadWriteLock 是 Java 中实现读写锁的一种方式,它通过维护两个锁来实现读写锁的功能,即读锁和写锁。读锁可以同时被多个线程获取,而写锁只能被一个线程获取。

2)计数器

计数器是一种用于控制并发访问的同步工具,它允许多个线程并发地访问共享资源,但需要满足一定的条件才能继续执行。常见的计数器包括 CountDownLatch、CyclicBarrier 和 Semaphore。CountDownLatch 是一种基于计数的同步工具,它可以让一个或多个线程等待一个或多个事件的发生。CyclicBarrier 是一种栅栏同步工具,它可以让多个线程在同一个时间点上等待。Semaphore 是一种计数信号量,它可以控制同时访问共享资源的线程数量。

2、java 中,有哪些独占锁

ava 中常见的独占锁包括 synchronized、ReentrantLock 和 ReentrantReadWriteLock 的写锁等。它们的特点是同一时间只能有一个线程持有锁,其他线程无法访问被锁定的代码块或资源。

1)synchronized

synchronized 是 Java 中最基本的同步机制之一,它是一种独占锁,只能被一个线程持有。在 synchronized 关键字修饰的代码块或方法上,同一时刻只能有一个线程获得锁,其他线程需要等待获得锁的线程释放锁才能继续执行。

2)ReentrantLock

ReentrantLock 是 Java 中常见的独占锁实现之一,与 synchronized 相比,ReentrantLock 具有更高的灵活性和扩展性。ReentrantLock 可以设置公平锁和非公平锁,默认是非公平锁。ReentrantLock 还支持可重入锁,即一个线程可以多次获取同一个锁,而不会导致死锁。

3)ReentrantReadWriteLock

ReentrantReadWriteLock 是一种读写锁,读写锁允许多个线程同时读取共享资源,但只允许一个线程写入共享资源。在 ReentrantReadWriteLock 中,写锁是独占锁,即只能被一个线程持有,而读锁是共享锁,可以被多个线程同时持有。


AQS-基本篇(1)
AQS-基本原理17问(2)
AQS-Condition对象的使用(3)


无知
0 声望1 粉丝

思考中


引用和评论

1 篇内容引用
0 条评论