以下为一个简单的闭锁的应用:
package JavaDay6_02;
import java.util.concurrent.CountDownLatch;
/**
* @author myvina@qq.com
* @date 18-6-2 上午8:55
*/
//在计时测试中使用闭锁来启动和停止线程
public class Demo1 {
public long timeTasks(int nThreads, final Runnable task) throws InterruptedException {
final CountDownLatch startGate = new CountDownLatch(1);
final CountDownLatch endGate = new CountDownLatch(nThreads);
for(int i = 0; i < nThreads; i++) {
Thread t = new Thread() {
@Override
public void run() {
try {
//线程开始运行,此处等待闭锁打开
startGate.await();
try {
task.run();
} finally {
//对endGate的闭锁计数器减一
endGate.countDown();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
t.start();
}
long start = System.nanoTime();
System.out.println("开始执行...");
//startGate的计数器减一,所有线程开始执行
startGate.countDown();
//等待最后一个线程执行完
endGate.await();
System.out.println("结束执行...");
long end = System.nanoTime();
return end - start;
}
public static void main(String[] args) {
Demo1 demo1= new Demo1();
Runnable task = new Runnable() {
@Override
public void run() {
long sum = 0L;
for(int i = 0; i < Integer.MAX_VALUE; i++) {
sum += i;
}
System.out.println(sum);
}
};
try {
System.out.println("运行时间为: " + demo1.timeTasks(10, task));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
运行结果为: