闭锁的作用是为了实现保证一部分资源全部进行初始化后在开始执行下一部分,可以考虑使用CountDownLatch类似于计数器的原理,应用比较灵活,可以实现对于分表的统计功能实现。例如多个线程同时处理对应的多个分表,保证全部的线程初始化完成后在进行下一步的数据处理。
直接上Demo
package com.renw.model1;
import java.util.concurrent.CountDownLatch;
/**
* Created by Smart on 2018/2/28.
*/
public class TestHarness {
public Long timeTask(int threads,Runnable task) throws InterruptedException {
final CountDownLatch startTask=new CountDownLatch(1);
final CountDownLatch endTask=new CountDownLatch(threads);
for(int i=0;i<threads;i++){
Thread t=new Thread(){
@Override
public void run(){
try {
startTask.await();
task.run();
} catch (InterruptedException e) {
e.printStackTrace();
}
finally {
endTask.countDown();
}
}
};
t.start();
}
Long startTime=System.nanoTime();
startTask.countDown();
endTask.await();
Long endTime=System.nanoTime();
System.out.println(endTime-startTime);
return endTime-startTime;
}
public static void main(String[] args) throws InterruptedException {
print p=new print();
TestHarness testHarness=new TestHarness();
System.out.println(testHarness.timeTask(10,p));
}
}