线程池使用及CountDownLatch类使用

来源:互联网 发布:比尔拉塞尔生涯数据 编辑:程序博客网 时间:2024/04/29 15:53

申明:个人学习总计,仅供参考,欢迎批评指正与交流。

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);    }}


0 0
原创粉丝点击