package com.thread;
import java.util.Map;
import java.util.Set;
class T1 extends Thread {
int i = 0;
public static void dispAllstack() {
Map<Thread,StackTraceElement[]> mpstes = Thread.getAllStackTraces();
Set<Map.Entry<Thread,StackTraceElement[]>> es = mpstes.entrySet();
for (Map.Entry<Thread,StackTraceElement[]> me : es) {
Thread th = me.getKey();
System.out.println("ㅁ" + th);
StackTraceElement[] stes2 = me.getValue();
/* for (int j=0; j<stes2.length; j++) {
System.out.println("ㅁ " + stes2[j]);
}*/
}
Thread.currentThread().getThreadGroup().list();
}
public void run() {
while(i < 10) {
try {
sleep(1000);
} catch(InterruptedException ie) {
ie.printStackTrace();
}
System.out.println(i);
i++;
if(i == 5) {
dispAllstack();
}
}
System.out.println("활동중인 스레드수 - " +Thread.currentThread().getThreadGroup().activeCount());
System.out.println("T1종료");
dispAllstack();
}
}
******************************************************************************************************
package com.thread;
class T2 extends Thread {
int i = 2;
public void run() {
while(i>1) {
try {
Thread.sleep(1000);
} catch(InterruptedException ie) {
ie.printStackTrace();
}
System.out.println("T2");
i++;
if(i % 10 == 0) {
Thread.currentThread().getThreadGroup().list();
System.out.println("활동중인 스레드수 - " +Thread.currentThread().getThreadGroup().activeCount());
}
}
}
}
******************************************************************************************************
package com.thread;
import java.util.*;
public class TestThread {
public static void dispAllstack() {
Map<Thread,StackTraceElement[]> mpstes = Thread.getAllStackTraces();
Set<Map.Entry<Thread,StackTraceElement[]>> es = mpstes.entrySet();
for (Map.Entry<Thread,StackTraceElement[]> me : es) {
Thread th = me.getKey();
System.out.println("ㅁ" + th);
StackTraceElement[] stes2 = me.getValue();
/* for (int j=0; j<stes2.length; j++) {
System.out.println("ㅁ " + stes2[j]);
}*/
}
}
public static void main(String[] args) {
Thread.currentThread().setName("메인");
T1 t1 = new T1();
T2 t2 = new T2();
t1.setName("T1");
t2.setName("T2");
// t2.setDaemon(true);
t1.start();
t2.start();
Thread.currentThread().getThreadGroup().list();
System.out.println("활동중인 스레드수 - " +Thread.currentThread().getThreadGroup().activeCount());
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
dispAllstack();
System.out.println("main종료");
Thread.currentThread().getThreadGroup().list();
}
}