๋ฐ๋ชฌ ์ค๋ ๋
์ฃผ ์ค๋ ๋์ ์์ ์ ๋๋ ๋ณด์กฐ์ ์ธ ์ญํ ์ ์ํํ๋ ์ค๋ ๋์ ๋๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ฃผ ์ค๋ ๋๊ฐ ์ข ๋ฃ๋๋ฉด ๋ฐ๋ชฌ ์ค๋ ๋๋ ๊ฐ์ ์ ์ผ๋ก ์๋ ์ข ๋ฃ๋ฉ๋๋ค.
์ ์ฉ ์๋ก๋ ์๋ ์ ์ฅ, ๊ฐ๋น์ง ์ปฌ๋ ํฐ ๋ฑ์ด ์๋๋ฐ ์ด ๊ธฐ๋ฅ๋ค์ ์ฃผ ์ค๋ ๋๊ฐ ์ข ๋ฃ๋๋ฉด ๊ฐ์ด ์ข ๋ฃ๋ฉ๋๋ค.
๋ฐ๋ชฌ ์ค๋ ๋ ๋ด์ฉ์ ์์ฑํด์ค ํ
public class DaemonThread extends Thread{
public void save(){
// ์๋ ์ ์ฅ
}
public void run(){
save();
}
}
๋ฉ์ธ ์ค๋ ๋์์ setDaemon ์ ํด์ฃผ๋ฉด ๋๋ค.
public class mainThread(){
public static void main(String[] args){
DaemonThread daemonThread = new DaemonThread();
daemonThread.setDaemon(true); // start() ๋ณด๋ค ๋จผ์ ์ ์ธํด์ฃผ์ง ์์ผ๋ฉด Exception ๋ฐ์
daemonThread.start();
}
}
์ค๋ ๋ ๊ทธ๋ฃน
๊ด๋ จ๋ ์ค๋ ๋๋ฅผ ๋ฌถ์ด์ ๊ด๋ฆฌํ ๋ชฉ์ ์ผ๋ก ์ด์ฉํ๋ค.
์ค๋ ๋๋ ๋ฐ๋์ ํ๋์ ์ค๋ ๋ ๊ทธ๋ฃน์ ํฌํจ๋๋๋ฐ,
๋ช ์์ ์ผ๋ก ์ ์ธํด์ฃผ์ง ์์ผ๋ฉด ์์ฑํ ์ค๋ ๋์ ๊ฐ์ ์ค๋ ๋ ๊ทธ๋ฃน์ ์ํ๊ฒ ๋๋ค.
// ์ค๋ ๋ ๊ทธ๋ฃน ์ด๋ฆ ์ป๊ธฐ
ThreadGroup group = Thread.currentThread().getThreadGroup();
String groupName = group.getName();
// ํ๋ก๊ทธ๋์ค ๋ด์์ ์คํ์ค์ธ ๋ชจ๋ ์ค๋ ๋ ์ ๋ณด ์ป๊ธฐ
// key = ์ค๋ ๋ ๊ฐ์ฒด value = ์ค๋ ๋์ ์ํ ๊ธฐ๋ก์ ๊ฐ๊ณ ์๋ ๋ฐฐ์ด
Map<Thread, StackTraceElement[]> map = Thread.getAllStackTraces();
๋ช ์์ ์ผ๋ก ์ค๋ ๋ ๊ทธ๋ฃน์ ๋ง๋ค๊ณ ์ถ์ ๊ฒฝ์ฐ
// ์ด๋ฆ๋ง ์ค ๊ฒฝ์ฐ
ThreadGroup group = new ThreadGroup(String name);
// ๋ถ๋ชจ ThreadGroup๊ณผ ๊ฐ์ด ์ค ๊ฒฝ์ฐ
// ๋ถ๋ชจ ์ค๋ ๋ ๊ทธ๋ฃน์ ์ง์ ํ์ง ์์ ๊ฒฝ์ฐ ํ์ฌ ์ค๋ ๋๊ฐ ์ํ ๊ทธ๋ฃน์ ํ์ ๊ทธ๋ฃน์ผ๋ก ์์ฑ
ThreadGroup group = new ThreadGroup(ThreadGroup parent, String name);
// ์์ฑ๊ณผ ๋์์ ๊ทธ๋ฃน์ ์ค ๊ฒฝ์ฐ (๋งค๊ฐ๊ฐ ์ฌ๋ฌ๊ฐ์ง์)
Thread t = new Thread(ThreadGroup group,Runnable target, String name);
์ค๋ ๋๋ฅผ ๊ทธ๋ฃน์ ํฌํจํ๋ฉด ์ด๋ค๊ฒ ์ข์๊น? ๊ทธ๋ฃน๋ด์ ํฌํจ๋ ๋ชจ๋ ์ค๋ ๋๋ฅผ ์ผ๊ด ์ปจํธ๋กคํ ์ ์๋ค๋ ์ ์ด๋ค.
interrupt() ๋ฉ์๋ ๋ฅผ ์ฌ์ฉํ์ฌ ๊ทธ๋ฃน ์์ ๋ชจ๋ ์ค๋ ๋๋ฅผ ์ข ๋ฃ์ํฌ ์ ์๋ค. (์ด ๋ฉ์๋๋ ํฌํจ๋ ๋ชจ๋ ์ค๋ ๋์ interrupt() ๋ฉ์๋๋ฅผ ๋ด๋ถ์ ์ผ๋ก ํธ์ถํด์ฃผ๊ธฐ ๋๋ฌธ.)
public class ThreadGroup{
public static void main(String[] args){
// aejoeng ๊ทธ๋ฃน์ ๋ ์ค๋ ๋๋ฅผ ํฌํจ์ํด
ThreadGroup group = new ThreadGroup("aejeong");
WorkThread workThreadA = new WorkThread(group,"workThreadA");
WorkThread workThreadB = new WorkThread(group,"workThreadB");
workThreadA.start();
workThreadB.start();
ThreadGroup mainGroup = Thread.currentThread().getThreadGroup();
// ํ์ฌ ๊ทธ๋ฃน์ ํฌํจ๋ ์ค๋ ๋์ ํ์ ๊ทธ๋ฃน์ ๋ํ ์ ๋ณด๋ฅผ ์ถ๋ ฅ
mainGroup.list();
// WorkThread์์ ๊ฐ๋ณ์ ์ผ๋ก ์์ธ ์ฒ๋ฆฌํ InterruptedExcetion์ ๋ฐ์์์ผ ์ค๋ ๋๋ฅผ ์ข
๋ฃํ๋ค.
group.interrupt();
}
}