Item 81. Concurrent Utilities
waitμ notify보λ€λ λμμ± μ νΈλ¦¬ν°λ₯Ό μ μ©νλΌ
wait
μ notiy
λ κ³ μμ€μ λμμ± μ νΈλ¦¬ν°κ° μ§μνκΈ° μ΄μ μ μ μμλ¬μΌ νμ§λ§, μ¬λ°λ₯΄κ² μ¬μ©νκΈ° κΉλ€λ‘κ³ λμμ± μ νΈλ¦¬ν°κ° μ§μνλ ν μμ μμλ μ¬μ©νμ§ μλ κ²μ΄ μ’λ€.(μ νΈλ¦¬ν° μ¬μ© κΆμ₯) java.util.concurrent
ν¨ν€μ§μμ μ 곡νλ κ³ μμ€ μ νΈλ¦¬ν°λ μΈ κ°μ§ λ²μ£Όλ‘ λλ μ μλ€.
μ€νμ νλ μμν¬: μμ μ λΉλκΈ°μ μΌλ‘ μ€νν μ μκ² ν΄μ€λ€.(
ExecutorService
μΈν°νμ΄μ€μThreadPoolExecutor
ν΄λμ€λ₯Ό ν¬ν¨ν νλ μμν¬)λμμ± μ»¬λ μ : λμμ±μ μ§μνλ 컬λ μ μ μ 곡νλ€.(
ConcurrentHashMap
,CopyOnWriteArrayList
λ±)λ΄λΆμμ λκΈ°νλ₯Ό μννκΈ° λλ¬Έμ λμμ±μ 무λ ₯ννλ κ²μ λΆκ°λ₯νκ³ , μΈλΆ λ½μ μΆκ°λ‘ μ¬μ©νλ©΄ μ±λ₯μ΄ μ νλλ€.
μ¬λ¬ λ©μλλ₯Ό μμμ μΌλ‘ λ¬Άμ΄ νΈμΆνλ κ²μ΄ λΆκ°λ₯νλ€.
λλ¬Έμ μ¬λ¬ κΈ°λ³Έ λμμ νλμ λμμΌλ‘ λ¬Άλ μν μμ‘΄μ μμ λ©μλλ€μ΄ μΆκ°λ¬μ΄λ€.(λμμ± μ»¬λ μ λΏλ§ μλλΌ μΌλ° 컬λ μ μμλ μ¬μ© κ°λ₯)
λκΈ°ν μ₯μΉ: μ€λ λκ° λ€λ₯Έ μ€λ λλ₯Ό κΈ°λ€λ¦΄ μ μκ² νμ¬, μμ μ μ‘°μ¨ν μ μκ² ν΄μ€λ€.(
CountDownLatch
,Semaphore
,Phaser
λ±)
λκΈ°ν μ₯μΉλ₯Ό μ¬μ©ν μμ
λκΈ°ν μ₯μΉλ₯Ό μ¬μ©νλ©΄, wait
, notify
λ₯Ό μ΄μ©νλ κ²λ³΄λ€ λ κ°λ¨νκ² λμμ±μ λ€λ£° μ μλ€.
μλμ μμλ CountDownLatch
λ₯Ό μ¬μ©νμ¬ λμλ€μ λμμ μμν΄ λͺ¨λ μλ£νλ λ° κ±Έλ¦¬λ μκ°μ μΈ‘μ νλ λ©μλμ΄λ€.
μ½λμ νλ¦μ λ€μκ³Ό κ°λ€.
ready.countDown()
λ‘ μμ μ μ€λ λκ° μ€λΉλ¨μ μλ¦Όstart.await()
λ‘ λͺ¨λ μμ μ μ€λ λκ° μ€λΉλ λκΉμ§ κΈ°λ€λ¦Ό(start.countDown()
μ λκΈ°)read.await()
λ‘ λͺ¨λ μμ μ μ€λ λκ° μ€λΉλ λκΉμ§ κΈ°λ€λ¦Όdone.countDown()
μΌλ‘ 2λ²μμ λκΈ°ν μμ μ μ€λ λλ₯Ό κΉ¨μdone.await()
λ‘ λͺ¨λ μμ μ μ€λ λκ° μμ μ μλ£ν λκΉμ§ κΈ°λ€λ¦Όaction.run()
μΌλ‘ μμ μ μνdone.countDown()
μΌλ‘ μμ μ μλ£ν¨μ μλ¦Όλͺ¨λ μμ μ΄ μλ£λμ΄
done.await()
κ° ν리면System.nanoTime() - startNanos
λ₯Ό λ°ν
wait
μ notify
wait
μ notify
wait
μ notify
λ κ³ μμ€ λμμ±μ μ¬μ©ν μ μλ μν©μμ μ ν κ³ λ €ν νμκ° μμΌλ©°, λ§μ½ λ κ±°μ μ½λλ₯Ό λ€λ€μΌ νλ€λ©΄, μλμ κ·μΉμ λ°λ₯΄κ³ μ¬λ°λ₯΄κ² μ¬μ©νλ λ°©λ²μ μμλλ κ²μ΄ μ’λ€.
wait
λ λ°λμ λκΈ° λ°λ³΅λ¬Έ(while
루ν μ¬μ©) μμμ νΈμΆν΄μΌ νλ€.μΌλ°μ μΌλ‘
notify
보λ€λnotifyAll
μ μ¬μ©νλ κ²μ΄ μ’λ€.
Last updated
Was this helpful?