第81條 并發(fā)工具優(yōu)先于 wait 和 notify
比較常見的同步器:
CountDownLatch、Semaphore、CyclicBarrier、Exchanger、Phaser-
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; } 始終應(yīng)該使用 while 循環(huán)模式來調(diào)用 wait 方法;永遠(yuǎn)不要在循環(huán)之外調(diào)用 wait 方法
不應(yīng)該在新代碼中使用
wait和notify
思考
- 應(yīng)該有空了解下Java的concurrent庫提供的內(nèi)容,由Doug Lea開發(fā)的AQS
-
wait和notify本身并不會太重要,但是基本的原理還是要了解下。本科期間找實(shí)習(xí),一個筆試題就是讓用這兩個函數(shù),實(shí)現(xiàn)兩個線程,按順序輸出26個英文字母