使用代码展示一下await()方法锁住对象之后使用countDown()方法解锁的过程
时间: 2023-12-12 10:02:04 浏览: 34
好的,下面是一个简单的例子,演示了await()方法锁住对象之后,使用countDown()方法解锁的过程:
```java
import java.util.concurrent.CountDownLatch;
public class Example {
public static void main(String[] args) {
final CountDownLatch latch = new CountDownLatch(1); // 创建一个CountDownLatch对象
// 创建一个线程,在该线程中调用await()方法等待唤醒
new Thread(new Runnable() {
@Override
public void run() {
try {
System.out.println("Thread A is waiting...");
latch.await(); // 调用await()方法等待唤醒
System.out.println("Thread A is done.");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
// 创建一个线程,在该线程中调用countDown()方法唤醒等待线程
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Thread B is counting down...");
latch.countDown(); // 调用countDown()方法将计数器减1
}
}).start();
}
}
```
在上面的例子中,我们创建了一个CountDownLatch对象,并将计数器初始化为1。然后创建了两个线程,其中一个线程调用await()方法等待唤醒,而另一个线程调用countDown()方法唤醒等待线程。
在调用await()方法时,该线程会阻塞,直到其他线程调用countDown()方法将计数器减1。在调用countDown()方法时,另一个线程将计数器减1,并唤醒等待线程。
需要注意的是,在调用await()方法之前,必须先获取CountDownLatch对象的锁。在上面的例子中,我们没有使用synchronized代码块来获取锁,而是直接调用await()和countDown()方法,因为CountDownLatch对象本身已经是线程安全的,不需要额外的同步措施。
相关推荐
![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)