Java

[Effective Java] ์•„์ดํ…œ 80. ์Šค๋ ˆ๋“œ๋ณด๋‹ค๋Š” ์‹คํ–‰์ž, ํƒœ์Šคํฌ, ์ŠคํŠธ๋ฆผ์„ ์• ์šฉํ•˜๋ผ.

quedevel 2023. 4. 15. 11:09
728x90
๋ฐ˜์‘ํ˜•

๐ŸŽฏ ์•„์ดํ…œ 80. ์Šค๋ ˆ๋“œ๋ณด๋‹ค๋Š” ์‹คํ–‰์ž, ํƒœ์Šคํฌ, ์ŠคํŠธ๋ฆผ์„ ์• ์šฉํ•˜๋ผ.

java.util.concurrent ๋‘๋‘ฅ๋“ฑ์žฅ

  • ์‹คํ–‰์ž ํ”„๋ ˆ์ž„์›Œํฌ๋ผ๊ณ  ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค ๊ธฐ๋ฐ˜์˜ ์œ ์—ฐํ•œ ํƒœ์Šคํฌ ์‹คํ–‰ ๊ธฐ๋Šฅ์„ ๋‹ด๊ณ  ์žˆ์Œ
ExecutorService exec = Executors.newSingleThreadExecutor();
exec.execute(runnable);
exec.shutdown();

๐ŸŽฏ ์•„์ดํ…œ 81. wait์™€ notify๋ณด๋‹ค๋Š” ๋™์‹œ์„ฑ ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์• ์šฉํ•˜๋ผ.

wait์™€ notify๋Š” ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ๊ฐ€ ์•„์ฃผ ๊นŒ๋‹ค๋กœ์šฐ๋‹ˆ ๊ณ ์ˆ˜์ค€ ๋™์‹œ์„ฑ ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜์ž!

  • java.util.concurrent์˜ ๊ณ ์ˆ˜์ค€ ์œ ํ‹ธ๋ฆฌํ‹ฐ์˜ ์„ธ ๋ฒ”์ฃผ

    1๏ธโƒฃ ์‹คํ–‰์ž ํ”„๋ ˆ์ž„์›Œํฌ

    2๏ธโƒฃ ๋™์‹œ์„ฑ ์ปฌ๋ ‰์…˜

    3๏ธโƒฃ ๋™๊ธฐํ™” ์žฅ์น˜

1) ์‹คํ–‰์ž ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์•ž์—์„œ ๋งํ•œ Executor๋กœ ์ธํ„ฐํŽ˜์ด์Šค ๊ธฐ๋ฐ˜์˜ ์œ ์—ฐํ•œ ํƒœ์ŠคํŠธ ์‹คํ–‰ ๊ธฐ๋Šฅ์„ ๋‹ด๊ณ ์žˆ๋‹ค.

2) ๋™์‹œ์„ฑ ์ปฌ๋ ‰์…˜์€ ์ปฌ๋ ‰์…˜์— ๋™์‹œ์„ฑ์„ ๊ฐ€๋ฏธํ•ด ๊ตฌํ˜„ํ•œ ๊ณ ์„ฑ๋Šฅ ์ปฌ๋ ‰์…˜์ด๋‹ค.

๋™์‹œ์„ฑ ์ปฌ๋ ‰์…˜์—์„œ ๋™์‹œ์„ฑ์„ ๋ฌด๋ ฅํ™”ํ•˜๋Š” ๊ฑด ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์™ธ๋ถ€์—์„œ ๋ฝ์„ ์ถ”๊ฐ€๋กœ ์‚ฌ์šฉํ•˜๋ฉด ์˜คํžˆ๋ ค ์†๋„๊ฐ€ ๋Š๋ ค์ง„๋‹ค.

3) ๋™๊ธฐํ™” ์žฅ์น˜๋Š” ์Šค๋ ˆ๋“œ๊ฐ€ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๋ฅผ ๊ธฐ๋‹ค๋ฆด ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

์˜ˆ๋ฅผ๋“ค์–ด Queue๋ฅผ ํ™•์žฅํ•œ BlockingQueue๋„ ํ™•์žฅ๋œ ๊ธฐ๋Šฅ์ค‘ take๋ผ๋Š” ๊ธฐ๋Šฅ์„ ๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ, ํ์˜ ์ฒซ ๋ฒˆ์งธ ์›์†Œ๋ฅผ ๊บผ๋‚ด๋Š” ๊ธฐ๋Šฅ์œผ๋กœ ๋งŒ์•ฝ ํ๊ฐ€ ๋น„์—ˆ๋‹ค๋ฉด ์ƒˆ๋กœ์šด ์›์†Œ๊ฐ€ ์ถ”๊ฐ€๋  ๋–„๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— BlockingQueue๋Š” ์ž‘์—… ํ๋กœ ์“ฐ๊ธฐ ์ ๋‹นํ•˜๊ณ  ThreadPoolExecutor๋‚˜ ์‹คํ–‰์ž ์„œ๋น„์Šค ๊ตฌํ˜„์ฒด์—์„œ BlockingQueue๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๊ทธ ๋ฐ–์— CountDownLatch,Semaphore,CyclicBarrier,Exchanger,Phaser ๋“ฑ์ด ์žˆ๋‹ค.


์ฐธ๊ณ  ์ž๋ฃŒ

Joshua Bloch, ใ€ŽEffective Java 3/Eใ€, ๊ฐœ์•ž๋งต์‹œ ์˜ฎ๊น€, ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ธ์‚ฌ์ดํŠธ(2018)
http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9788966262281&orderClick=LEa&Kc=

728x90
๋ฐ˜์‘ํ˜•