学习理解CountDownLatch

来源:互联网 发布:詹姆斯和科比知乎 编辑:程序博客网 时间:2024/05/19 02:02
package testBy20170925;import java.text.SimpleDateFormat;import java.util.Date;import java.util.concurrent.*;/** * Created by yujiahuan on 2017/9/22. */public class TestNewFixPool {    static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");    public static String getDateStr() {        String ret = sdf.format(new Date());        return ret;    }    ExecutorService executorService = new ThreadPoolExecutor(5, 5, 5, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>());    /**     */    public void submit(CountDownLatch latch) {        executorService.execute(new LoggingDto(latch));    }    /**     */    private class LoggingDto implements Runnable {        private CountDownLatch latch;        public LoggingDto(CountDownLatch latch) {            this.latch = latch;        }        @Override        public void run() {            try {                System.out.println(getDateStr() + "start" + Thread.currentThread().getName());                Thread.sleep(1000);                latch.countDown();                System.out.println(getDateStr() + "end" + Thread.currentThread().getName());            } catch (Exception e) {                System.out.println(e);            }        }    }    public static void main(String arg[]) throws InterruptedException, BrokenBarrierException {        CountDownLatch latch = new CountDownLatch(10);        TestNewFixPool testNewFixPool = new TestNewFixPool();        long start = System.currentTimeMillis();        for (int i = 0; i < 10; i++) {            testNewFixPool.submit(latch);        }        latch.await();        System.out.println(getDateStr() + " usetime:" + (System.currentTimeMillis() - start));    }}
学习理解
CountDownLatch