1. 程式人生 > 其它 >多執行緒方法執行等待

多執行緒方法執行等待

多執行緒方法執行等待
// 表示同一時間,最多允許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();
}