Java并发编程问题:CountDownLatch使用示例
CountDownLatch是Java并发工具类之一,用于协调多个线程。当一个线程到达CountDownLatch的down方法(将计数器值减1),而其他等待该事件的线程在count <= 0时会进入wait状态。
下面是一个简单的CountDownLatch使用示例:
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
public class CountDownLatchExample {
private CountDownLatch countDownLatch = new CountDownLatch(3);
public void thread1() {
System.out.println("Thread 1 started");
try {
countDownLatch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Thread 1 finished");
}
public void thread2() {
System.out.println("Thread 2 started");
// 第一个线程已经调用了await,所以这里直接down
countDownLatch.countDown();
try {
countDownLatch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Thread 2 finished");
}
public static void main(String[] args) {
CountDownLatchExample example = new CountDownLatchExample();
Thread thread1 = new Thread(example::thread1);
Thread thread2 = new Thread(example::thread2);
// 启动两个线程
thread1.start();
thread2.start();
// 等待所有线程执行完毕
thread1.join();
thread2.join();
System.out.println("All threads finished");
}
}
在这个示例中,我们创建了三个线程:thread1
、thread2
和一个主线程。我们使用CountDownLatch来协调它们的执行。
当所有计数达到0时(即countDownLatch.countDown()
调用后),其他等待的线程会进入wait状态,并在被中断后由相应的Thread重新唤醒。
还没有评论,来说两句吧...