1. Runnable

2. Callable

3. ExecutorService

1. Runnable

Untitled

์–ด๋–ค ๊ฐ์ฒด๋„ ๋ฆฌํ„ดํ•˜์ง€ ์•Š์Œ. Exception์„ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š์Œ.

1-1) Runnable

Thread๋Š” Runnable์„ ์ธ์ž๋กœ ๋ฐ›๊ณ  ์‹คํ–‰ํ•จ.

์–ด๋–ค ๊ฐ’๋„ ๋ฆฌํ„ดํ•˜์ง€ ์•Š์œผ๋ฉฐ Runnable์˜ Run() ๋ฉ”์†Œ๋“œ์— ์ •์˜๋œ ์ฝ”๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•จ.

1-2) Runnable Code Image

โ†’ Override vs Overload(Click)

Untitled

โ†’ ๊ฒฐ๊ณผ : Called at 21:13:10.332

1-3) ์œ„์˜ ์ฝ”๋“œ๋ฅผ Lambda ์‹์œผ๋กœ ํ‘œํ˜„ํ•œ ์ฝ”๋“œ

1-3)-1. Lambda์‹ ๊ฐœ๋…

๋žŒ๋‹ค ํ•จ์ˆ˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฐœ๋…์œผ๋กœ ์ต๋ช… ํ•จ์ˆ˜๋ฅผ ์ง€์นญํ•˜๋Š” ์šฉ์–ด์ž„.

ํ˜„์žฌ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š” ๋žŒ๋‹ค์˜ ๊ทผ๊ฐ„์€ ์ˆ˜ํ•™๊ณผ ๊ธฐ์ดˆ ์ปดํ“จํ„ฐ๊ณผํ•™ ๋ถ„์•ผ์—์„œ์˜ ๋žŒ๋‹ค ๋Œ€์ˆ˜์ž„.

๋žŒ๋‹ค ๋Œ€์ˆ˜๋Š” ๊ฐ„๋‹จํžˆ ๋งํ•˜๋ฉด ์ˆ˜ํ•™์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋ณด๋‹ค ๋‹จ์ˆœํ•˜๊ฒŒ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž„.

๋žŒ๋‹ค ๋Œ€์ˆ˜๋Š” ์ต๋ช… ํ•จ์ˆ˜ ์ด๊ธฐ์— ์ด๋ฆ„์„ ๊ฐ€์งˆ ํ•„์š”๊ฐ€ ์—†์Œ.

๋‘ ๊ฐœ ์ด์ƒ์˜ ์ž…๋ ฅ์ด ์žˆ๋Š” ํ•จ์ˆ˜๋Š” ์ตœ์ข…์ ์œผ๋กœ 1๊ฐœ์˜ ์ž…๋ ฅ๋งŒ ๋ฐ›๋Š” ๋žŒ๋‹ค ๋Œ€์ˆ˜๋กœ ๋‹จ์ˆœํ™”๋  ์ˆ˜ ์žˆ์Œ.

Curring(Click)์ž„.

1-3)-2. Lambda์˜ ์žฅ๋‹จ์ 

1-3)-3. Lambda์˜ ํ‘œํ˜„์‹

โ†’ ๋žŒ๋‹ค๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜ ํ™”์‚ดํ‘œ(โ†’) ํ•จ์ˆ˜๋ชธ์ฒด๋กœ ์ด์šฉํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ.

โ†’ ํ•จ์ˆ˜ ๋ชธ์ฒด๊ฐ€ ๋‹จ์ผ ์‹คํ–‰๋ฌธ์ด๋ฉด ๊ด„ํ˜ธ๋ฅผ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Œ.

โ†’ ํ•จ์ˆ˜ ๋ชธ์ฒด๊ฐ€ return์œผ๋กœ๋งŒ ๊ตฌ์„ฑ๋˜ ์žˆ๋Š” ๊ฒฝ์šฐ ๊ด„ํ˜ธ{}๋ฅผ ์ƒ๋žต ํ•  ์ˆ˜ ์—†์Œ.

//์ •์ƒ์ ์ธ ์œ ํ˜•
() -> {}
() -> 1
() -> { return 1; }

(int x) -> x+1
(x) -> x+1
x -> x+1
(int x) -> { return x+1; }
x -> { return x+1; }

(int x, int y) -> x+y
(x, y) -> x+y
(x, y) -> { return x+y; }

(String lam) -> lam.length()
lam -> lam.length()
(Thread lamT) -> { lamT.start(); }
lamT -> { lamT.start(); }

//์ž˜๋ชป๋œ ์œ ํ˜• ์„ ์–ธ๋œ type๊ณผ ์„ ์–ธ๋˜์ง€ ์•Š์€ type์„ ๊ฐ™์ด ์‚ฌ์šฉ ํ•  ์ˆ˜ ์—†๋‹ค.
(x, int y) -> x+y
(x, final y) -> x+y

1-3)-4. Lambda์‹ Java Code

Untitled

2. Callable

Untitled

ํŠน์ • ํƒ€์ž…์˜ ๊ฐ์ฒด๋ฅผ ๋ฆฌํ„ดํ•จ. Exception์„ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Œ.

2-1) Callable

Thread๋Š” FutureTask๋ฅผ ํ†ตํ•ด์„œ Callable์„ ํ˜ธ์ถœํ•จ.

FuntureTask.get()์œผ๋กœ Callable์˜ call() ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜์–ด ๊ฒฐ๊ณผ๊ฐ€ ๋ฆฌํ„ด๋˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆผ.

2-2) Callable Java Code

Untitled

โ†’ ๊ฒฐ๊ณผ result : Called at : 21:17:54.051

3. ExecutorService

ExecutorService๋„ Callable์„ job์œผ๋กœ ๋“ฑ๋กํ•˜๊ณ  ์ˆ˜ํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ์Œ.

๋‹ค์Œ ์ฝ”๋“œ์ฒ˜๋Ÿผ Future๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํ„ด๋ฐ›์„ ์ˆ˜ ์žˆ์Œ.

3-1) ExecutorService Java Code

Untitled

โ†’ ๊ฒฐ๊ณผ result : Called at 21:19:25.693

3-2) Lambda์‹ ํ‘œํ˜„

Untitled