"์•ˆ๋…•, ์•„๋ฏธ๊ณ !

"๋ชจ๋“  ์ƒˆ๋กœ์šด ๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ์žŠ์–ด๋ฒ„๋ฆฐ ์˜ค๋ž˜๋œ ๊ฒƒ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ ์Šค๋ ˆ๋“œ ์ค‘์ง€์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์ด ์ด๋ฏธ ์ธํ„ฐ๋ŸฝํŠธ() ๋ฉ”์„œ๋“œ๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์„ ์žŠ์–ด๋ฒ„๋ ธ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค."

"๋„ค, ์—˜๋ฆฌ, ์™„์ „ํžˆ ์žŠ์–ด๋ฒ„๋ ธ์–ด์š”."

"์ข‹์•„. ๊ทธ๋Ÿผ ๋‚ด๊ฐ€ ์ƒ๊ธฐ์‹œ์ผœ์ค„๊ฒŒ."

"์ž๋ฐ”์—์„œ ๋ˆ„๊ตฐ๊ฐ€ ์‹คํ–‰ ์ค‘์ธ ์Šค๋ ˆ๋“œ๋ฅผ ์ค‘์ง€ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์Šค๋ ˆ๋“œ์— ์‹ ํ˜ธ๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ์Šค๋ ˆ๋“œ ๊ฐœ์ฒด์˜ ์ˆจ๊ฒจ์ง„ isInterrupted ๋ณ€์ˆ˜ ๋ฅผ true๋กœ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค."

"๊ฐ ์Šค๋ ˆ๋“œ์—๋Š” ์ด ํ”Œ๋ž˜๊ทธ๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์ธํ„ฐ๋ŸฝํŠธ() ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ธํ„ฐ๋ŸฝํŠธ () ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ ๋˜๋ฉด ์Šค๋ ˆ๋“œ ๊ฐœ์ฒด ๋‚ด๋ถ€์˜ isInterrupted ๋ณ€์ˆ˜๊ฐ€ true๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค."

"Thread.sleep() ๋˜๋Š” join() ๋ฉ”์„œ๋“œ๊ฐ€ ์Šค๋ ˆ๋“œ์—์„œ ํ˜ธ์ถœ๋˜๋ฉด ๋ฉ”์„œ๋“œ๋Š” isInterrupted ํ”Œ๋ž˜๊ทธ๊ฐ€ ํ˜„์žฌ ์Šค๋ ˆ๋“œ์— ๋Œ€ํ•ด ์„ค์ •๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ด ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋˜๋ฉด(isInterrupted ๋ณ€์ˆ˜๊ฐ€ true์™€ ๊ฐ™์Œ) ๋ฉ”์„œ๋“œ ๋Š” InterruptedException ์„ ๋˜์ง‘๋‹ˆ๋‹ค ."

"์—ฌ๊ธฐ์—์„œ ์˜ค๋ž˜๋œ ์˜ˆ๋ฅผ ์ƒ๊ธฐ์‹œ์ผœ ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค."

์•”ํ˜ธ ์„ค๋ช…
class Clock implements Runnable
{
public void run()
{
Thread current = Thread.currentThread();

while (!current.isInterrupted())
{
Thread.sleep(1000);
System.out.println("Tik");
}
}
}
Clock์˜ run ๋ฉ”์„œ๋“œ๋Š” ํ˜„์žฌ ์Šค๋ ˆ๋“œ์— ๋Œ€ํ•œ Thread ๊ฐœ์ฒด๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

Clock ํด๋ž˜์Šค๋Š” ํ˜„์žฌ ์Šค๋ ˆ๋“œ์˜ isInterrupt ๋ณ€์ˆ˜๊ฐ€ false์ธ ํ•œ ์ดˆ๋‹น ํ•œ ๋ฒˆ์”ฉ "Tick"์ด๋ผ๋Š” ๋‹จ์–ด๋ฅผ ์ฝ˜์†”์— ์”๋‹ˆ๋‹ค.

isInterrupt๊ฐ€ true๊ฐ€ ๋˜๋ฉด run ๋ฉ”์„œ๋“œ๊ฐ€ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

public static void main(String[] args)
{
Clock clock = new Clock();
Thread clockThread = new Thread(clock);
clockThread.start();

Thread.sleep(10000);
clockThread.interrupt();
}
๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋Š” ์˜์›ํžˆ ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ํ•˜์œ„ ์Šค๋ ˆ๋“œ(์‹œ๊ณ„)๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

10์ดˆ๋ฅผ ๊ธฐ๋‹ค๋ฆฐ ํ›„ ์ธํ„ฐ๋ŸฝํŠธ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ž‘์—…์„ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ์Šค๋ ˆ๋“œ๊ฐ€ ์ž‘์—…์„ ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

ํด๋Ÿญ ์Šค๋ ˆ๋“œ๊ฐ€ ์ž‘์—…์„ ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

"์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๋Š” run ๋ฉ”์„œ๋“œ ์—์„œ ๋ฌดํ•œ ๋ฃจํ”„์˜ ์ผ๋ถ€๋กœ sleep ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค . ๋ฃจํ”„์—์„œ isInterrupt ๋ณ€์ˆ˜๋Š” ์ž๋™์œผ๋กœ ๊ฒ€์‚ฌ๋ฉ๋‹ˆ๋‹ค. ์Šค๋ ˆ๋“œ๊ฐ€ sleep ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋ฉ”์„œ๋“œ๋Š” ๋จผ์ € ํ•ด๋‹น ์Šค๋ ˆ๋“œ์— ๋Œ€ํ•ด isInterrupt ๊ฐ€ ์ฐธ์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค( sleep ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ ๊ฒƒ). ์ด๊ฒƒ์ด ์ฐธ์ด๋ฉด ๋ฉ”์„œ๋“œ๋Š” ์ž ๋“ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  InterruptedException ์„ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค . "

"ํ•˜์ง€๋งŒ ์ด ์˜ˆ์—์„œ๋Š” ๋ฃจํ”„ ์กฐ๊ฑด์—์„œ isInterrupted ๋ณ€์ˆ˜๋ฅผ ์ง€์†์ ์œผ๋กœ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค."

"์ด ์ ‘๊ทผ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๋ช‡ ๊ฐ€์ง€ ์ด์œ ๊ฐ€ ์žˆ์—ˆ๋˜ ๊ฒƒ์œผ๋กœ ๊ธฐ์–ตํ•ฉ๋‹ˆ๋‹ค. ์ƒ๊ธฐ์‹œ์ผœ ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?"

" ์ฒซ์งธ , run ๋ฉ”์„œ๋“œ์— ํ•ญ์ƒ ๋ฃจํ”„๊ฐ€ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์ด ๋ฉ”์„œ๋“œ๋Š” ๋‹จ์ˆœํžˆ ๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•œ ์ˆ˜์‹ญ ๋ฒˆ์˜ ํ˜ธ์ถœ๋กœ ๊ตฌ์„ฑ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๊ฐ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ „์— isInterrupted ๊ฒ€์‚ฌ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค."

" ๋‘˜์งธ , ๋‹ค์–‘ํ•œ ์ž‘์—…์ด ๋งŽ์ด ํฌํ•จ๋œ ์ผ๋ถ€ ๋ฉ”์„œ๋“œ๋Š” ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."

" ์…‹์งธ , ์˜ˆ์™ธ ๋ฐœ์ƒ์€ isInterrupted ๊ฒ€์‚ฌ๋ฅผ ๋Œ€์ฒดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹จ์ง€ ํŽธ๋ฆฌํ•œ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ๋ฐœ์ƒ๋œ ์˜ˆ์™ธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ˜ธ์ถœ ์Šคํƒ์„ run ๋ฉ”์„œ๋“œ ์ž์ฒด ๋กœ ๋น ๋ฅด๊ฒŒ ๋˜๋Œ๋ ค ๋†“์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. "

" ๋„ท์งธ , ์ˆ˜๋ฉด ๋ฐฉ๋ฒ•์ด ๋งŽ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ์œ ์šฉํ•œ ๋ฐฉ๋ฒ•์€ ๊ทธ๋‹ค์ง€ ๋„์›€์ด ๋˜์ง€ ์•Š๋Š” ์•”๋ฌต์  ํ™•์ธ์œผ๋กœ ํ–ฅ์ƒ๋˜๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ๋งˆ์น˜  ์•„๋ฌด๋„ ํŠน๋ณ„ํžˆ ํ™•์ธ์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์€ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ, ๊ฑฐ๊ธฐ์— ์žˆ์Šต๋‹ˆ๋‹ค.  ์ด๊ฒƒ์€ ๋‹น์‹ ์ด ํ•  ๋•Œ ๋งค์šฐ ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ณ  ์ง์ ‘ ํ™•์ธ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."

" ๋‹ค์„ฏ์งธ , ์ถ”๊ฐ€ ๊ฒ€์‚ฌ๋Š” ์„ฑ๋Šฅ์„ ์ €ํ•˜์‹œํ‚ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค. sleep ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์Šค๋ ˆ๋“œ๊ฐ€ ์•„๋ฌด ์ž‘์—…๋„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์•„์•ผ ํ•จ์„ ์˜๋ฏธํ•˜๋ฏ€๋กœ(์ˆ˜๋ฉด ์ œ์™ธ) ์ถ”๊ฐ€ ์ž‘์—…์œผ๋กœ ์ธํ•ด ์•„๋ฌด๋„ ๊ท€์ฐฎ๊ฒŒ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค."

"๊ทธ๊ฒŒ ๋ฐ”๋กœ ๋‹น์‹ ์ด ์ด์ „์— ๋งํ–ˆ๋˜ ๊ฒƒ์ž…๋‹ˆ๋‹ค."

"๊ทธ๋Ÿฌ๋ฉด ยซ ์•„๋ฌด๋„ ์Šค๋ ˆ๋“œ๊ฐ€ ์ค‘์ง€๋  ๊ฒƒ์ด๋ผ๊ณ  ๋ณด์žฅํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์Šค๋ ˆ๋“œ๋งŒ ์ž์ฒด์ ์œผ๋กœ ์ค‘์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ยป ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?"

"ํ™•์‹ ํ•˜๋Š”."

"์ด์ „์—๋Š” Java์˜ ์ดˆ๊ธฐ ๋ฒ„์ „์—์„œ ์Šค๋ ˆ๋“œ์— stop() ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด JVM์ด ์‹ค์ œ๋กœ ์Šค๋ ˆ๋“œ๋ฅผ ์ค‘์ง€ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์Šค๋ ˆ๋“œ๊ฐ€ JVM ์™ธ๋ถ€์—์„œ ์ž‘์—…(์˜ˆ: ํŒŒ์ผ์— ์“ฐ๊ธฐ ๋˜๋Š” ํ˜ธ์ถœ)์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ OS ๊ธฐ๋Šฅ) ์ด๋Ÿฐ ์‹์œผ๋กœ ์ค‘๋‹จ๋˜์—ˆ์„ ๋•Œ ์ค‘๋‹จ์œผ๋กœ ์ธํ•ด ํŒŒ์ผ์ด ๋‹ซํžˆ์ง€ ์•Š๊ฑฐ๋‚˜ ์‹œ์Šคํ…œ ๋ฆฌ์†Œ์Šค๊ฐ€ ํ•ด์ œ๋˜์ง€ ์•Š๋Š” ๋“ฑ ๋งŽ์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค."

"์ž๋ฐ” ์ฐฝ์‹œ์ž ์ดํšŒ์—์„œ ์“ฐ๋ ˆ๋“œ ๊ฐ•์ œ ์ข…๋ฃŒ ๋ฐฉ๋ฒ•์„ ์‚ญ์ œํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์šฐ๋ฆฌ๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์€ ํŠน์ • ํ”Œ๋ž˜๊ทธ(isInterrupted)๋ฅผ ์„ค์ •ํ•˜๊ณ  ์Šค๋ ˆ๋“œ ์ฝ”๋“œ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘์„ฑ๋˜์–ด ์ด ํ”Œ๋ž˜๊ทธ๊ฐ€ ์ฒ˜๋ฆฌ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ผ๋Š” ๊ฒƒ๋ฟ์ž…๋‹ˆ๋‹ค. ์ด ํ”Œ๋ž˜๊ทธ๋Š” ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค!'๋ผ๋Š” ํ‘œ์ง€ํŒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฉˆ์ถ”๊ฑฐ๋‚˜ ๋ง๊ฑฐ๋‚˜๋Š” ๊ฐ์ž์˜ ์ผ์ž…๋‹ˆ๋‹ค."

"ํ•˜์ง€๋งŒ InterruptedException์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?"

"์ด ์Šค๋ ˆ๋“œ์—์„œ ์‹คํ–‰ ์ค‘์ธ ์ฝ”๋“œ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ try-catch ๋ธ”๋ก์ด ์žˆ์œผ๋ฉด ์–ด๋–ป๊ฒŒ ๋ฉ๋‹ˆ๊นŒ? ์–ด๋”˜๊ฐ€์—์„œ InterruptedException์ด ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ์ผ๋ถ€ try-catch๊ฐ€ ์ด๋ฅผ ํฌ์ฐฉํ•˜๊ณ  ์žŠ์–ด๋ฒ„๋ฆฌ์ง€ ์•Š๋Š”๋‹ค๋Š” ๋ณด์žฅ์€ ์—†์Šต๋‹ˆ๋‹ค. ์Šค๋ ˆ๋“œ๊ฐ€ ์ค‘์ง€๋ฉ๋‹ˆ๋‹ค."

"๋˜ ๋‹ค๋ฅธ ๊ฒƒ์€ ์Šค๋ ˆ๋“œ๊ฐ€ ์ด๋ฏธ ์ƒ๋‹นํžˆ ์ €์ˆ˜์ค€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ ๊ฐ„์ฃผ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‹ค์Œ์— ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ๋ง์”€ ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค."

"๋‹น์‹ ์€ Ellie๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋‹น์‹ ์€ Scheherazade์ž…๋‹ˆ๋‹ค!"

"๊ทธ๋ž˜์„œ, ์•„๋ฏธ๊ณ ! ํ˜„์žฌ ์ˆ˜์—…์€ ๋ชจ๋‘ ๋ช…ํ™•ํ•ฉ๋‹ˆ๊นŒ?"

"๋„ค."

"์ข‹์•„, ์ข‹์•„."