public class CountDownLatchDemo {
public static void main(String[] args) {
CountDownLatch countDownLatch = new CountDownLatch(2);
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
try {
Thread.sleep((long) (Math.random() * 30000));
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("1进来了");
countDownLatch.countDown();
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
try {
Thread.sleep((long) (Math.random() * 300));
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("2进来了");
countDownLatch.countDown();
}
}).start();
try {
countDownLatch.await();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("结束了");
}
CountDownLatch 只有当计数为0 的时候才会放行, 所以不管上面两个线程,只有当两个线程都完成的时候才会输出最后一句话“结束了”,至于为什么CountDownLatch 是线程安全的。 我点进去看了, countDownLatch 里面有个静态内部类Sync 继承了Aqs,执行CountDown()的时候走父类release, 然后走sync 的tryRelease 。 至于静态内部类为什么是线程安全的?找资料中
本文通过一个具体的Java代码示例,详细介绍了CountDownLatch类在多线程环境中的应用。CountDownLatch是一种协调工具类,用于使一个或多个线程等待其他线程完成操作。文章展示了如何使用CountDownLatch来同步两个线程,确保在所有线程完成指定任务后,主线程才能继续执行。
465

被折叠的 条评论
为什么被折叠?



