闭锁,多线程计数器;
- 创建 闭锁对象
CountDownLatch countDownLatch = new CountDownLatch(10);
倒数10此 - 每次执行线程任务
countDownLatch.countDown();
-1 - 等待 计数器完成倒数操作
countDownLatch.await();
, 才往下继续执行
import java.util.concurrent.CountDownLatch;
public class CountDownLatchDemo {
public static void main(String[] args) {
CountDownLatch countDownLatch = new CountDownLatch(10); // 1. 闭锁相当于一个计数器 // 10
MyRunnable myRunnable = new MyRunnable(countDownLatch);
long start = System.currentTimeMillis();
for (int i = 0; i <10; i++) {
new Thread(myRunnable).start();
}
// 3. 等待 计数器完成倒数操作, 才往下执行
try { countDownLatch.await(); } catch (InterruptedException e) { e.printStackTrace(); }
long end = System.currentTimeMillis();
Console.log("=====多线程,执行完成时间====>{}",end-start);
}
}
class MyRunnable implements Runnable {
private CountDownLatch latch;
public MyRunnable(CountDownLatch latch) {
this.latch = latch;
}
@Override
public void run() {
synchronized (MyRunnable.class) {
try {
for (int i =0; i<10000; i++){
Console.log(i);
}
} finally {
// 2. 每次执行线程任务, 计数器-1
latch.countDown();
}
}
}
}