运用 Java CountDownLatch 阻塞线程,直到其他线程完成某些处理。
请使用 CountDownLatch 编写一个程序,实现以下效果:
Thread A 代码:
public class ThreadA extends Thread{
CountDownLatch latch;
public ThreadA() {
}
public ThreadA(String name, CountDownLatch latch) {
super(name);
this.latch = latch;
}
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + ":开始计算...");
try {
latch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + ":计算完毕...");
}
}
线程 B 代码:
public class ThreadB extends Thread{
CountDownLatch latch;
public ThreadB() {
}
public ThreadB(String name, CountDownLatch latch) {
super(name);
this.latch = latch;
}
@Override
public void run() {
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
latch.countDown();
}
System.out.println(Thread.currentThread().getName() + ":计算 1-100 的和:" + sum);
}
}
测试代码:
public class Test {
public static void main(String[] args) {
System.out.println("嗨客网(www.haicoder.net)\n");
CountDownLatch latch = new CountDownLatch(1);
ThreadA a = new ThreadA("线程A",latch);
ThreadB b = new ThreadB("线程B",latch);
a.start();
b.start();
}
}
运行结果如下图:
以上案例实现线程 A 阻塞,等待线程 B 运算完毕再执行。