申明:个人学习总计,仅供参考,欢迎批评指正与交流。
public class Main {
private static final int COUNT = 100;
private static int poolSize = -1;
private static ExecutorService mExecutorService;
private static CountDownLatch mLatch;
private static Runnable mRunable = new Runnable() {
@Override
public void run() {
//每执行一次子线程,计数器减1
mLatch.countDown();
int currentCount = (int) mLatch.getCount();
if (currentCount <=5 ) {
System.out.println("currentCount = " + currentCount);
}
}
};
/**
* @param args主函数入口
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("Test Thread MainThread Start...");
//1.创建线程池
initialize();
//2.设置同步计数器
mLatch = new CountDownLatch(COUNT);
for (int i = 0; i < COUNT; i++) {
//3.执行子线程
mExecutorService.execute(mRunable);
}
try {
//4.只要计数器大于零就阻塞主线程,直到子线程全部执行完毕
mLatch.await();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
<span style="white-space:pre"> </span>//5.关闭线程池
mExecutorService.shutdownNow();
}
//初始化线程池
private static void initialize() {
if (poolSize == -1) {
//从配置文件中获取线程池的大小,及同时执行子线程的线程数
poolSize = Config.getPoolSize();
}
//通过类ExecutorService创建线程池
mExecutorService = Executors.newFixedThreadPool(poolSize);
}
}