CountDownLatch 信号量
时间: 2023-10-20 22:35:03 浏览: 111
CountDownLatch是Java中的一个同步工具类,它可以使一个线程等待其他线程执行完毕后再继续执行。它通过内部维护的计数器来实现,当所有线程都执行完毕后,计数器变为0,等待的线程就会被释放。
与信号量不同的是,CountDownLatch的计数器只能在初始化时设置一次,并且只能减少,不能增加。当计数器为0时,所有等待的线程就会被释放。
下面是一个使用CountDownLatch的示例代码,假设有4个线程,需要等待这4个线程都执行完毕后,主线程才能继续执行。
```
public static void main(String[] args) {
int threadCount = 4; // 4条线程
CountDownLatch countDownLatch = new CountDownLatch(4); // 创建一个拥有4个计数器的CountDownLatch
for (int i = 0; i < threadCount; i++) {
new Thread(new Runnable() {
@Override
public void run() {
// 线程执行完毕后,计数器减1
countDownLatch.countDown();
System.out.println("计数器还剩" + countDownLatch.getCount());
}
}).start();
}
try {
// 在这里阻塞,只有计数器为0的时候才会释放
countDownLatch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("执行完成啦!");
}
```
在这个示例中,主线程创建了4个线程,并且每个线程执行完毕后都会调用`countDownLatch.countDown()`方法将计数器减1。主线程在`countDownLatch.await()`处被阻塞,直到计数器变为0才会继续执行。这样就保证了主线程会等待所有线程执行完毕后再继续执行。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [Java并发编程——Semaphore (信号量)和CountDownLatch](https://blog.csdn.net/h610968110/article/details/78840249)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
阅读全文