Thread

Process๋Š” ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค.

Thread๋Š” ํ•˜๋‚˜์˜ ์ž‘์—… ๋‹จ์œ„์ด๋‹ค ์ง€๊ธˆ๊นŒ์ง€, Java Main์„ ๊ธฐ์ค€์œผ๋กœ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰๋˜๊ฒŒ ์ฝ”๋“œ๋ฅผ ์งฏ๋‹ค๋ฉด, Main Thread๋ฅผ ๊ธฐ์ค€์œผ๋กœํ•œ Single Thread Proccess์ด๋‹ค

Thread๊ฐ€ ๋‘˜ ์ด์ƒ์ธ ํ”„๋กœ๊ทธ๋žจ์€ ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ ํ”„๋กœ์„ธ์Šค๋ผ๊ณ  ํ•œ๋‹ค. CPU๊ฐ€ ๋ฒˆ๊ฐˆ์•„ ๊ฐ€๋ฉฐ Thread๋“ค์„ ์‹คํ–‰ํ•˜์—ฌ, ์—ฌ๋Ÿฌ๊ฐœ๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒƒ ์ฒ˜๋Ÿผ ๋ณด์ด๊ฒŒ ํ•ด์ค€๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ Thread๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ Thread, Runnable์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. extendํ•˜๋Š” ๋ฐฉ์‹์€ ์ข‹์•„ํ•˜์ง€ ์•Š๊ธฐ๋•Œ๋ฌธ์— Thread๋ฅผ์ถ”์ฒœํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค

Thread๊ด€๋ จ ์˜ˆ์ œ๋Š” ์ „๋ถ€ ์•„๋ž˜์— ์žˆ๋Š” ํ”„๋ฆฐํ„ฐ ๊ตฌํ˜„์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์„ค๋ช…ํ•  ์˜ˆ์ •์ด๋‹ค.

๋ชจ๋“  ์ž‘์—…์€ Expect์— ์ ํ˜€์žˆ๋Š” ์ˆœ์„œ๋กœ ์ง„ํ–‰ ๋˜์–ด์•ผ ํ•œ๋‹ค.

Thread

Thread๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์œ„ ๋„์•ˆ์„ ๊ตฌํ˜„ํ•ด๋ณด๋„๋ก ํ•œ๋‹ค

ํ•˜์ง€๋งŒ ๊ฒฐ๊ณผ๋Š” blokcing ๋˜์–ด 1 2 3 4 5 ๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰๋˜์ง€ ์•Š์•˜๊ณ . ์ถ”๊ฐ€์ ์ธ ์ž‘์—…์ด ํ”„๋ฆฐํŠธ์—์ถ”๊ฐ€๊ฐ€ ๋˜์ง€ ์•Š์•˜๋‹ค

1-2-4-3-5
1. Printer Run
2. Searching Printer ... 1
Printer Status ... RUNNABLE
Printer Status ... 0
PRINTER NUMBER ::Thread-0 PRINTING :: A
PRINTER NUMBER ::Thread-0 PRINTING :: B
PRINTER NUMBER ::Thread-0 PRINTING :: C
PRINTER NUMBER ::Thread-0 PRINTING :: D
Printer Size ... 0
4. Printer is Empty ...
3. Printer Add more
5. Printer Stop
PRINTER NUMBER ::Thread-0 PRINTING :: E
PRINTER NUMBER ::Thread-0 PRINTING :: F

Run()์€ Thread์˜ ์ž‘์—…์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. (= ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ๋กœ ๋™์ž‘ํ•œ๋‹ค )

Main์— scheduler.run(); => scheduler.start(); ๋กœ ๋ฐ”๊พผ๋’ค ๋‹ค์‹œ ์‹คํ–‰ํ•ด์ค€๋‹ค

1-2-3-5-4
1. Printer Run
2. Searching Printer ... 1
3. Printer Add more
5. Printer Stop
PRINTER NUMBER ::Thread-1 PRINTING :: A
PRINTER NUMBER ::Thread-1 PRINTING :: B
PRINTER NUMBER ::Thread-1 PRINTING :: C
Printer Status ... RUNNABLE
Printer Size ... 1
PRINTER NUMBER ::Thread-1 PRINTING :: 1
PRINTER NUMBER ::Thread-1 PRINTING :: 2
PRINTER NUMBER ::Thread-1 PRINTING :: 3
Printer Status ... RUNNABLE
Printer Size ... 0
4. Printer is Empty ...

์ถ”๊ฐ€ํ•œ ์ž‘์—…๋„ ์ฒ˜๋ฆฌ๋˜์—ˆ์ง€๋งŒ ํ”„๋ฆฐํ„ฐ๊ฐ€ ๋Œ๊ณ ์žˆ๋Š”๋ฐ 5(printer stop)์ด ๋‚˜์˜จ๊ฒƒ์„ ์•Œ ์ˆ˜์žˆ๋‹ค.

STATE

๋ชจ๋“  ์ž‘์—…(Thread)๋Š” ์ƒํƒœ(state)๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. Thread.currentThread().getState() ๋กœ ํ˜„์žฌ ๊ตฌ๋™์ค‘์ธ ( ์ž‘์—…์ค‘์ธ ) Thread์˜ ์ƒํƒœ๋ฅผ ๊ฐ€์ ธ ์˜ฌ ์ˆ˜์žˆ๋‹ค.

TYPEDESCRIPTION

NEW

Thread๊ฐ€ ์ƒ์„ฑ๋œ ํ›„, ์ž‘์—… ๋Œ€๊ธฐ์ƒํƒœ

RUNNABLE

์ž‘์—… ์ง„ํ–‰์ค‘์ธ ์ƒํƒœ

BLOCKED

๋ฝ์ด๋˜์–ด ์žˆ๋Š” ์ƒํƒœ

WAITING

๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์˜ํ†ต์ง€๋ฅผ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํƒœ

TIME_WATING

์‹œ๊ฐ„ ๋งŒํผ์„ ๋Œ€๊ธฐ

TERMINATED

์ž‘์„ ๋งˆ์นœ ์ƒํƒœ

์ด๊ฒƒ์„ ์ด์šฉํ•˜์—ฌ ํ”„๋ฆฐํŠธ ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ์ข…๋ฃŒ ๋˜์—ˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•œ๋‹ค.\

How do code ?

PrintScheduler์— ์ž‘์—…์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก Thread์˜ ์ƒํƒœ๋ฅผ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ์ถ”๊ฐ€ Main์— ์ƒํƒœ๋ฅผ ํ™•์ธํ•œ ํ›„ Main์„ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ๋„๋ก ์ถ”๊ฐ€

Result

1. Printer Run
2. Searching Printer ... 1
3. Printer Add more
PRINTER NUMBER ::Thread-1 PRINTING :: A
PRINTER NUMBER ::Thread-1 PRINTING :: B
PRINTER NUMBER ::Thread-1 PRINTING :: C
Printer Status ... RUNNABLE
Printer Size ... 1
PRINTER NUMBER ::Thread-1 PRINTING :: 1
PRINTER NUMBER ::Thread-1 PRINTING :: 2
PRINTER NUMBER ::Thread-1 PRINTING :: 3
Printer Status ... RUNNABLE
Printer Size ... 0
4. Printer is Empty ...
5. Printer Stop

์ •์ƒ์ ์œผ๋กœ Printer๊ฐ€ ์ข…๋ฃŒ๋˜์—ˆ์Œ์„ ์•Œ ์ˆ˜์žˆ๋‹ค.

View With Git

Last updated