Effective Java - 并發(fā)工具優(yōu)先于 wait 和 notify

第81條 并發(fā)工具優(yōu)先于 wait 和 notify

  1. 比較常見的同步器CountDownLatch、Semaphore、CyclicBarrier、Exchanger、Phaser

  2. CountDownLatch的用法:

    public static long time(Executor executor, int concurrency, Runnable action) throws InterruptedException {
        CountDownLatch ready = new CountDownLatch(concurrency);
        CountDownLatch start = new CountDownLatch(1);
        CountDownLatch done = new CountDownLatch(concurrency);
        for (int i = 0; i < concurrency; i++) {
            executor.execute(() -> {
                ready.countDown(); // Tell timer we're ready
                try {
                    start.await(); // Wait till peers are ready
                    action.run();
                } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                } finally {
                    done.countDown(); // Tell timer we're done
                }
            });
        }
        ready.await(); // Wait for all workers to be ready
        long startNanos = System.nanoTime();
        start.countDown(); // And they're off!
        done.await(); // Wait for all workers to finish
        return System.nanoTime() - startNanos;
    }
    
  3. 始終應(yīng)該使用 while 循環(huán)模式來調(diào)用 wait 方法;永遠(yuǎn)不要在循環(huán)之外調(diào)用 wait 方法

  4. 不應(yīng)該在新代碼中使用waitnotify

思考

  1. 應(yīng)該有空了解下Java的concurrent庫提供的內(nèi)容,由Doug Lea開發(fā)的AQS
  2. waitnotify本身并不會太重要,但是基本的原理還是要了解下。本科期間找實(shí)習(xí),一個筆試題就是讓用這兩個函數(shù),實(shí)現(xiàn)兩個線程,按順序輸出26個英文字母
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容