JAVA学习日志——线程池等待所有线程结束

    xiaoxiao2022-07-05  144

    参考:https://blog.csdn.net/q258523454/article/details/81978855

    自己测试通过的代码片段:

     

     使用CountDownLatch

    // 测试 int jobNum = 8; CountDownLatch countDownLatch = new CountDownLatch(jobNum); startTime = System.currentTimeMillis(); for (int i = 0; i < jobNum; i++) { threadPool.execute( () -> { try { System.println("job"+i); // 这里写处理任务的代码 ... } catch (Throwable e) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); e.printStackTrace(new PrintStream(baos)); String errorMsg = baos.toString(); System.out.println("errorMsg:" + errorMsg); } finally { // 计数器count减少1 countDownLatch.countDown(); } } ); } // 等待计数器中的count变为0 countDownLatch.await(); endTime = System.currentTimeMillis();

     

    使用 awaitTermination 

    int numThread = 10; milliSeconds1 = System.currentTimeMillis(); ExecutorService fixedThreadPool = Executors.newFixedThreadPool(numThread); for(int i = 0; i < numThread; i++) { fixedThreadPool.execute(new Runnable () { public void run() { for(int i = 0 ; i < n/numThread; i++) { //safe=safe && orderRiskCheckRule2(orderData); operations(orderData); } } }); } if(!fixedThreadPool.isShutdown()) { fixedThreadPool.shutdown(); } try { fixedThreadPool.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS); } catch (InterruptedException e) { } milliSeconds2 = System.currentTimeMillis(); res = (milliSeconds2-milliSeconds1); msg = "CheckRule2 "+n+" times,total time spent: "+res+" milliseconds."; log.info(msg);

     

    最新回复(0)