多執行緒方法執行等待
阿新 • • 發佈:2021-12-24
多執行緒方法執行等待
// 表示同一時間,最多允許permits執行acquire() 和release() 之間的程式碼。 private static Semaphore available = new Semaphore(100, false); private static ThreadPoolExecutor executor = new ThreadPoolExecutor(10, 20, 60, TimeUnit.SECONDS, new LinkedBlockingQueue(10000)); private static List<String> collect = new ArrayList<>(); public static void main(String[] args) throws Exception { /*等待initData()方法中的多個執行緒全部處理完資料後,才執行下一步驟*/ initData(); // doSomething } public static void initData() throws Exception { // 允許一個或多個執行緒等待一組正在其他執行緒中執行的操作完成。 CountDownLatch使用給定的計數進行初始化。由於對countDown方法的呼叫,await方法會阻塞,直到當前計數為零,在此之後,所有正在等待的執行緒都會被釋放,後續對await的呼叫會立即返回。 CountDownLatch latch = new CountDownLatch(collect.size()); for (String str : collect) { available.acquire(); executor.execute(new Runnable() { @Override public void run() { try { } catch (Exception e) { } finally { available.release(); // 遞減鎖存的計數 latch.countDown(); } } }); } // 導致當前執行緒等待,直到閂鎖倒數為零 latch.await(); }