6.1 ์คํ ๊ฐ๋ฅํ ๊ฐ์ฒด
๊ทธ๋์ ์ฐ๋ฆฌ๋ ํจํค์ง์ ๊ฐ์ฅ ํฐ ๋ถ๋ถ์ ๋๋ฌํ์ต๋๋ค. Future ๋ฐ Callable ์ธํฐํ์ด์ค๋ฅผ ํตํด ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ ๊ธฐ๋ฅ๊ณผ ํจ๊ป ๋น๋๊ธฐ ์์ ์ ์คํํ๊ธฐ ์ํ ์ธํฐํ์ด์ค์ ThreadPoolExecutor, ScheduledPoolExecutor, ForkJoinPool๊ณผ ๊ฐ์ ์ค๋ ๋ ํ์ ์์ฑํ๊ธฐ ์ํ ์๋น์ค ๋ฐ ํฉํ ๋ฆฌ์ ๋ํด ์ค๋ช ํฉ๋๋ค.
๋ ๋์ ์ดํด๋ฅผ ์ํด ์ธํฐํ์ด์ค์ ํด๋์ค๋ฅผ ์ฝ๊ฐ ๋ถํดํด ๋ณด๊ฒ ์ต๋๋ค.
6.2 ์คํ ๊ฐ๋ฅํ ๊ฐ์ฒด์ ์คํ
Future<V>
๋น๋๊ธฐ ์์
์ ๊ฒฐ๊ณผ๋ฅผ ์ป๊ธฐ ์ํ ํ๋ฅญํ ์ธํฐํ์ด์ค์
๋๋ค. ์ฌ๊ธฐ์ ํต์ฌ ๋ฉ์๋๋ ๋ค๋ฅธ ์ค๋ ๋์ ๋น๋๊ธฐ ์์
์ด ์๋ฃ๋ ๋๊น์ง ํ์ฌ ์ค๋ ๋(์๊ฐ ์ด๊ณผ ์ฌ๋ถ์ ๊ด๊ณ์์ด)๋ฅผ ์ฐจ๋จํ๋ get ๋ฉ์๋์
๋๋ค. ์์
์ ์ทจ์ํ๊ณ ํ์ฌ ์ํ๋ฅผ ํ์ธํ๋ ์ถ๊ฐ ๋ฐฉ๋ฒ๋ ์์ต๋๋ค. FutureTask ํด๋์ค๋ ์ข
์ข
๊ตฌํ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
RunnableFuture<V>
- Future๊ฐ ํด๋ผ์ด์ธํธ API์ ๋ํ ์ธํฐํ์ด์ค์ธ ๊ฒฝ์ฐ RunnableFuture ์ธํฐํ์ด์ค๋ ์ด๋ฏธ ๋น๋๊ธฐ ๋ถ๋ถ์ ์์ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. run() ๋ฉ์๋๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์๋ฃํ๋ฉด ๋น๋๊ธฐ ์์
์ด ์ข
๋ฃ๋๊ณ get ๋ฉ์๋๋ฅผ ํตํด ๊ฒฐ๊ณผ๋ฅผ ๊ฒ์ํ ์ ์์ต๋๋ค.
Callable<V>
- ๋น๋๊ธฐ ์์
์ ์ํ Runnable ์ธํฐํ์ด์ค์ ํ์ฅ๋ ์๋ ๋ก๊ทธ์
๋๋ค. ์
๋ ฅ๋ ๊ฐ์ ๋ฐํํ๊ณ ํ์ธ๋ ์์ธ๋ฅผ throwํ ์ ์์ต๋๋ค. ์ด ์ธํฐํ์ด์ค์๋ run() ๋ฉ์๋๊ฐ ์์ง๋ง ๋ง์ java.util.concurrent ํด๋์ค๊ฐ Runnable๊ณผ ํจ๊ป ์ด๋ฅผ ์ง์ํฉ๋๋ค.
FutureTask<V>
โ Future/RunnableFuture ์ธํฐํ์ด์ค ๊ตฌํ. ๋น๋๊ธฐ ์์
์ Runnable ๋๋ Callable ๊ฐ์ฒด์ ํํ๋ก ์์ฑ์ ์ค ํ๋์ ๋ํ ์
๋ ฅ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. FutureTask ํด๋์ค ์์ฒด๋ ์๋ฅผ ๋ค์ด new Thread(task).start() ๋๋ ThreadPoolExecutor๋ฅผ ํตํด ์์
์ ์ค๋ ๋์์ ์์๋๋๋ก ์ค๊ณ๋์์ต๋๋ค. ๋น๋๊ธฐ ์์
์ ๊ฒฐ๊ณผ๋ get(...) ๋ฉ์๋๋ฅผ ํตํด ๊ฒ์๋ฉ๋๋ค.
Delayed
- ๋ฏธ๋์ ์์ํด์ผ ํ๋ ๋น๋๊ธฐ ์์
๊ณผ DelayQueue์์ ์ฌ์ฉ๋ฉ๋๋ค. ๋น๋๊ธฐ ์์
์์ ์ ์๊ฐ์ ์ค์ ํ ์ ์์ต๋๋ค.
ScheduledFuture<V>
- Future ๋ฐ Delayed ์ธํฐํ์ด์ค๋ฅผ ๊ฒฐํฉํ ๋ง์ปค ์ธํฐํ์ด์ค.
RunnableScheduledFuture<V>
- RunnableFuture์ ScheduledFuture๋ฅผ ๊ฒฐํฉํ ์ธํฐํ์ด์ค. ๋ํ ์์
์ด ์ผํ์ฑ ์์
์ธ์ง ๋๋ ์ง์ ๋ ๋น๋๋ก ์คํ๋์ด์ผ ํ๋์ง ์ฌ๋ถ๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
GO TO FULL VERSION