Runnable์ ๊ธฐ์กด์ extend๋ Thread๋ฅผ Runnable๋ก ๋ฐ๊ฟ์ฃผ๊ธฐ๋ง ํ๋ฉด๋๋ค.
์ง๊ธ ๊น์ง์ ๋์ผํ Printer๋ฅผ ์์ ๋ก ์ฌ์ฉ
How do code ?
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๊น์ง ์ค์ ํ ์ ์๋ค
์ด๋ฅผ ์ ์ฉํ์ฌ 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์ ์์
์์๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ฒ ๋ง๋ค์๋ ์๋ค.