最新的java锁都有什么,怎么用的
时间: 2024-03-02 19:51:55 浏览: 28
Java中的锁机制包括synchronized关键字、ReentrantLock、StampedLock、ReadWriteLock、Semaphore、CountDownLatch等。下面简单介绍一下这些锁的使用方法:
1. synchronized关键字
synchronized关键字是Java中内置的锁机制,用于同步方法或同步代码块的执行。synchronized使用的是对象锁,即在进入synchronized方法或代码块时,会自动获取当前对象的锁,执行完后再自动释放锁。使用synchronized关键字的示例如下:
```
public synchronized void method() {
// 同步代码块
...
}
```
2. ReentrantLock
ReentrantLock是JDK提供的一个可重入锁实现类,它提供了比synchronized更灵活的锁操作。ReentrantLock支持公平锁和非公平锁,可以手动获取和释放锁,还提供了可重入锁的支持。使用ReentrantLock的示例如下:
```
ReentrantLock lock = new ReentrantLock();
lock.lock(); // 获取锁
try {
// 同步代码块
...
} finally {
lock.unlock(); // 释放锁
}
```
3. StampedLock
StampedLock是JDK8中提供的一种乐观读写锁,它支持乐观读、悲观读和写操作,可以有效地提高读操作的并发性能。使用StampedLock的示例如下:
```
StampedLock lock = new StampedLock();
long stamp = lock.tryOptimisticRead();
// 乐观读
if (!lock.validate(stamp)) {
// 转换为悲观读
stamp = lock.readLock();
try {
// 同步代码块
...
} finally {
lock.unlockRead(stamp);
}
} else {
// 同步代码块
...
}
```
4. ReadWriteLock
ReadWriteLock是JDK提供的另一种读写锁实现类,它允许多个线程同时读取共享资源,但只允许一个线程写入共享资源。使用ReadWriteLock的示例如下:
```
ReadWriteLock lock = new ReentrantReadWriteLock();
lock.readLock().lock(); // 获取读锁
try {
// 读操作
...
} finally {
lock.readLock().unlock(); // 释放读锁
}
lock.writeLock().lock(); // 获取写锁
try {
// 写操作
...
} finally {
lock.writeLock().unlock(); // 释放写锁
}
```
5. Semaphore
Semaphore是JDK提供的信号量实现类,它用于控制同时访问共享资源的线程数量。Semaphore可以设置许可证数量,每个线程在访问共享资源前必须先获取许可证,访问完后再释放许可证。使用Semaphore的示例如下:
```
Semaphore semaphore = new Semaphore(10); // 设置许可证数量为10
semaphore.acquire(); // 获取许可证
try {
// 同步代码块
...
} finally {
semaphore.release(); // 释放许可证
}
```
6. CountDownLatch
CountDownLatch是JDK提供的倒计时门闩实现类,它用于等待多个线程的执行完成。CountDownLatch可以设置计数器初始值,每个线程执行完后将计数器减1,当计数器为0时,等待线程可以继续执行。使用CountDownLatch的示例如下:
```
CountDownLatch latch = new CountDownLatch(10); // 设置计数器初始值为10
for (int i = 0; i < 10; i++) {
new Thread(() -> {
// 同步代码块
...
latch.countDown(); // 计数器减1
}).start();
}
latch.await(); // 等待计数器为0
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)