Runnable

Runnable์€ ๊ธฐ์กด์— extend๋œ Thread๋ฅผ Runnable๋กœ ๋ฐ”๊ฟ”์ฃผ๊ธฐ๋งŒ ํ•˜๋ฉด๋œ๋‹ค.

์ง€๊ธˆ ๊นŒ์ง€์™€ ๋™์ผํ•œ Printer๋ฅผ ์˜ˆ์ œ๋กœ ์‚ฌ์šฉ

How do code ?

Runnable Thread

Result

1. Printer Run
2. Searching Printer ... 1
Printer Status ... RUNNABLE
Printer Size ... 1
PRINTER NAME ::Printer :: 25
3. Printer Add more
PRINTING :: A
PRINTING :: B
PRINTING :: C
COMPLETE
Printer Status ... RUNNABLE
Printer Size ... 1
PRINTER NAME ::Printer :: 30
PRINTING :: 1
PRINTING :: 2
PRINTING :: 3
COMPLETE
4. Printer is Empty ...
5. Printer Stop

์™„์„ฑ ํ•˜๊ณ  ๋ณด๋‹ˆ 1-2-3-4-5 ์ˆœ์„œ๋Š” ๋งž๋Š”๋ฐ Thread.sleep()์ด ๊ต‰์žฅํžˆ ๋งŽ๊ณ , ์ฝ˜์†”์ด ์ค‘๊ตฌ๋‚œ๋ฐฉ์œผ๋กœ ์ฐํ˜€์žˆ๋Š” ๋ชจ์Šต์„ ๋ณผ์ˆ˜์žˆ๋‹ค

Priority

์Šค๋ ˆ๋“œ๋Š” ๊ฐ๊ฐ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ–๋Š”๋‹ค. ์ด ์šฐ์„ ์ˆœ์œ„๋Š” ์“ฐ๋ ˆ๋“œ์˜ ์‹คํ–‰์‹œ๊ฐ„๊ณผ ๋น„๋ก€ํ•˜๊ฒŒ๋œ๋‹ค.

priority๋Š” 0~ 10๊นŒ์ง€ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค

Drawing
Thread

์ด๋ฅผ ์ ์šฉํ•˜์—ฌ sleep์„ ์ œ๊ฑฐํ•ด ๋ณด๋„๋ก ํ•œ๋‹ค.

result

1. Printer Run
2. Searching Printer ... 
3. Printer Add More
Printer Status ... RUNNABLE
Printer Size ... 2
4. Printer is Empty ...
5. Printer Stop
PRINTER NAME ::Printer :: 25
PRINTER NAME ::Printer :: 24
PRINTING :: 1
PRINTING :: 2
PRINTING :: 3
PRINTING :: A
PRINTING :: B
PRINTING :: C
COMPLETE
COMPLETE

ํ”„๋ฆฐํŠธ ์ž‘์—…์ด 3 ๊ณผ 4 ์‚ฌ์ด์— ๋“ค์–ด๊ฐ€๋ฉด ์กฐ๊ธˆ ๊น”๋”ํ•  ๊ฒƒ ๊ฐ™๋‹ค.

Daemon Thread

๋‹ค๋ฅธ ์ผ๋ฐ˜ ์“ฐ๋ ˆ๋“œ์˜ ์ž‘์—…์„ ๋•๋Š” ๋ณด์กฐ ์“ฐ๋ ˆ๋“œ์ด๋‹ค. ์ผ๋ฐ˜ ์“ฐ๋ ˆ๋“œ์˜ ์ž‘์—…์ด ์ข…๋ฃŒ๋˜๋ฉด ๋ฐ๋ชฌ์“ฐ๋ ˆ๋“œ๋„ ๊ฐ•์ œ ์ข…๋ฃŒ๋˜๊ฒŒ ๋œ๋‹ค. PrinterScheduler=>Printer(daemon)์œผ๋กœ ์ˆ˜์ • ํ•˜๋„๋ก PrintScheduler๋ฅผ ์ˆ˜์ •ํ•ด์ค€๋‹ค.

public void start(Printer printer){
new Thread(printer){{
    setName("Printer :: "+getId());
    setDaemon(true);
  }}.start();
  printers.remove(printer);
}

result

1. Printer Run
2. Searching Printer ... 
3. Printer Add more
Printer Status ... RUNNABLE
Printer Size ... 2
PRINTER NAME ::Printer :: 24
PRINTING :: A
PRINTING :: B
PRINTING :: C
COMPLETE
4. Printer is Empty ...
5. Printer Stop
PRINTER NAME ::Printer :: 25
PRINTING :: 1
PRINTING :: 2
PRINTING :: 3
COMPLETE

์œ„์™€ ๊ฐ™์ด ์ž‘์—…์„ Daemon Thread์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

์•„์ง ํ•˜๋‚˜์˜ ์ž‘์—…์ด 4,5์ดํ›„์— ์‹œ์ž‘๋˜๋Š”๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

More Details

public void start(Printer printer){
    Thread executor = new Thread(printer) {{
        setName("Printer :: " + getId());
    }};
    executor.start();
    try {
        executor.join();
    } catch (InterruptedException e) {
        throw new RuntimeException(e);
    }
    printers.remove(printer);
}

์ด๋ ‡๊ฒŒ Thread.join์„ ํ™œ์šฉํ•˜๋ฉด

1. Printer Run
2. Searching Printer ... 
3. Printer Add more
Printer Status ... RUNNABLE
Printer Size ... 2
PRINTER NAME ::Printer :: 24
PRINTING :: A
PRINTING :: B
PRINTING :: C
COMPLETE
PRINTER NAME ::Printer :: 25
PRINTING :: 1
PRINTING :: 2
PRINTING :: 3
COMPLETE
4. Printer is Empty ...
5. Printer Stop

Scheduler๊ฐ€ Printer์˜ ์ž‘์—… ์ˆœ์„œ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ๋งŒ๋“ค์ˆ˜๋„ ์žˆ๋‹ค.

Last updated