import java.util.concurrent.*; public class CountDownLatchDemo { public static void main(String[] args) { ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(3, 3, 30, TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(4), Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy()); CountDownLatch countDownLatch = new CountDownLatch(3); CountDownLatchRunnable runnable1 = new CountDownLatchRunnable(countDownLatch); CountDownLatchRunnable runnable2 = new CountDownLatchRunnable(countDownLatch); CountDownLatchRunnable runnable3 = new CountDownLatchRunnable(countDownLatch); threadPoolExecutor.execute(runnable1); threadPoolExecutor.execute(runnable2); threadPoolExecutor.execute(runnable3); try { countDownLatch.await(10, TimeUnit.SECONDS); threadPoolExecutor.shutdown(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("Main out."); } static class CountDownLatchRunnable implements Runnable { private CountDownLatch countDownLatch; public CountDownLatchRunnable(CountDownLatch countDownLatch){ this.countDownLatch = countDownLatch; } @Override public void run() { try { System.out.println("countDownLatch in."); Thread.sleep(5000); System.out.println("countDownLatch out."); countDownLatch.countDown(); } catch (InterruptedException e) { e.printStackTrace(); } } } }
JUC多线程并发控制类--CountDownLatch
最新推荐文章于 2024-11-16 22:34:09 发布