๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Java

(3)
์™œ ๋‚ด CompletableFuture ๋Š” Console ์— ๋กœ๊ทธ๊ฐ€ ์—†๋Š”๊ฐ€? ForkJoinPool ์˜ ๋ฐ๋ชฌ ์Šค๋ ˆ๋“œ๋ฅผ ์•Œ์•„๋ณด์ž CompletableFuture๋ฅผ ํ™œ์šฉํ•œ ๋น„๋™๊ธฐ์—์„œ ์ฝ˜์†”์— ๋กœ๊ทธ๊ฐ€ ๋‚จ์ง€ ์•Š๋Š” ๋ฌธ์ œ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด CompletableFuture ์‚ฌ์šฉ๋ฒ•์„ ์ตํžˆ๋Š” ์ค‘, ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋กœ์ง(Task ํด๋ž˜์Šค์˜ doAsyncWithForkJoinPool( ))์—์„œ ์ฝ˜์†”์— ๋กœ๊ทธ๊ฐ€ ๋‚จ์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€ ๋˜์—ˆ๋˜ ์ฝ”๋“œ๋กœ ์‹คํ–‰ ๊ฒฐ๊ณผ๋Š” "๋ฉ”์ธ ์ข…๋ฃŒ" ๋งŒ ๋‚˜์˜ฌ ๋ฟ, Thread.currentThread().getName() ๊ด€๋ จ ๋กœ๊ทธ๋Š” ์ฝ˜์†”์— ๋‚˜์˜ค์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.// Main ํด๋ž˜์Šคpublic static void main(String[] args) { Task task = new Task(); CompletableFuture future = task.doAsyncWit..
Java์˜ ๋™๊ธฐํ™” ๊ธฐ๋ฒ• - synchronized & ReentrantLock ์— ๋Œ€ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ˆœ์œผ๋กœ ๊ธ€์ด ์ด์–ด์ง‘๋‹ˆ๋‹ค.synchronized ์†Œ๊ฐœsynchronized vs static synchronized synchronized ๋‹จ์ ์„ ๊ทน๋ณตํ•œ ReentrantLock ์†Œ๊ฐœsynchronized vs ReentrantLock 1. synchronized ์†Œ๊ฐœ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ๋Š” ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ๊ฐ™์€ ์ž์›์— ์ ‘๊ทผํ•  ๊ฒฝ์šฐ, ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋ฌธ์ œ(๋ฐ์ดํ„ฐ ์†์ƒ, ์ถฉ๋Œ ๋“ฑ)๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋™๊ธฐํ™”(synchronization) ๊ธฐ๋ฒ•์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.Java์—์„œ ์ œ๊ณตํ•˜๋Š” synchronized ํ‚ค์›Œ๋“œ๋Š” ๋ชจ๋‹ˆํ„ฐ ๋ฝ(Monitor Lock)์„ ์ด์šฉํ•ด ๋™๊ธฐํ™”๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋‹ˆํ„ฐ๋Š” OS๊ฐ€ ์•„๋‹Œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ์ˆ˜์ค€์—์„œ ์ œ๊ณตํ•˜๋Š” ๋™๊ธฐํ™” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค. Java์˜ ๋ชจ๋“  ๊ฐ์ฒด(์ธ..
ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ๋จผ์ € ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ๊ณ ๋ฏผ๊ณผ ๋…ธ๋ ฅ ์šฐํ…Œ์ฝ” ํ”„๋ฆฌ์ฝ”์Šค๊ฐ€ ๋๋‚˜๊ณ , ํ•ต์‹ฌ ๊ธฐ๋Šฅ ๋ถ€ํ„ฐ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด '์ˆซ์ž ์•ผ๊ตฌ ๊ฒŒ์ž„' ๋ฏธ์…˜์„ ๋‹ค์‹œ ํ’€์–ด๋ณด์•˜๋‹ค. ํ•˜์ง€๋งŒ, ํ•ต์‹ฌ ๊ธฐ๋Šฅ๋ถ€ํ„ฐ ๊ตฌํ˜„ ํ•˜๊ธฐ ์œ„ํ•ด, ๊ณ ๋ฏผํ•˜๊ณ  ๋‹ต์„ ์ฐพ๋Š” ๊ณผ์ •์ด 2์ฃผ๊ฐ€ ๊ฑธ๋ ธ๋‹ค.์ด ๊ณผ์ •์—์„œ ์ƒ๊ฒผ๋˜ ๊ถ๊ธˆ์ฆ๋“ค์„ Q&A ํ˜•์‹์œผ๋กœ ๋จผ์ € ์–˜๊ธฐํ•ด๋ณด๊ฒ ๋‹ค! *์˜ˆ์‹œ๋กœ ๋‚˜์˜ค๋Š” ์ฝ”๋“œ์˜ ์ „๋ฌธ์ž…๋‹ˆ๋‹ค.โœ… ์š”๊ตฌ์‚ฌํ•ญ์„ ๋งŒ์กฑํ•˜๊ธฐ ์œ„ํ•ด ๊ฒ€์ฆ(validate)์„ ์–ด๋””์„œ ํ•  ๊ฒƒ์ธ๊ฐ€?์š”๊ตฌ์‚ฌํ•ญ์„ ๋งŒ์กฑํ•˜๋Š” ์กฐ๊ฑด๋“ค์„ ์–ด๋””์„œ ๊ฒ€์ฆํ•ด์•ผ ํ• ๊นŒ? ๋‚˜์˜ ์ƒ๊ฐ์€ ๊ฐ ๊ฐ์ฒด์˜ ์ƒ์„ฑ์ž์—์„œ ๊ฒ€์ฆ์„ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.์ด ๋•Œ, ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ์ด ๋œ๋‹ค๋ฉด ๊ทธ ๊ฐ์ฒด๋Š” ์š”๊ตฌ์‚ฌํ•ญ์˜ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜๋Š” ๋ณด์žฅ๋œ ๊ฐ์ฒด์ž„์„ ๋œปํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ˆซ์ž ์•ผ๊ตฌ ๊ฒŒ์ž„์˜ "์„œ๋กœ ๋‹ค๋ฅธ ์„ธ ์ž๋ฆฌ์ˆ˜" ๋ผ๋Š” ์š”๊ตฌ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์กฐ๊ฑด๋“ค์„ ๋‚ดํฌํ•˜๊ณ  ์žˆ๋‹ค.โ‘ ์„œ๋กœ ๋‹ค๋ฅธ ์„ธ ์ž๋ฆฌ์ˆ˜์˜ ์ˆซ์ž๋Š” ์ค‘๋ณต๋˜์ง€ ..