현재 버전

TERMINATED된 쓰레드를 아는법이 궁금해요.


똑같은코드가 어제 잘되던게 오늘 안되는일은 있을수가없잖아요? 

근데 지금 상황이 딱 그래요.

getAllStackTrace();로 분명 TERMINATED된 쓰레드까지 출력이 잘 되다가 안되다가 해요.



public class MainThread 
{
	public static void main(String[] args) throws InterruptedException
	{
		Thread t1 = new Thread("t1");
		Thread t2 = new Thread("t2");
		Thread t3 = new Thread("t3");
		
		t1.start();
		t2.start();
		t3.start();
		
		Set<Thread> threads = Thread.getAllStackTraces().keySet();
		for(Thread thread : threads)
		{
			System.out.println("==================================");
			System.out.println("그룹의 정보 = " + thread.getThreadGroup());
			System.out.println("쓰레드 이름 = " + thread.getName());
			System.out.println("쓰레드 상태 = " + thread.getState());
		}
		System.out.println("==================================");
	}
}


이 똑같은 코드를 계속 실행하면요,


(콘솔화면 전체를 찍었어요)


위처럼 TERMINATED된게 2개만 나올때도있고,

TERMINATED된게 하나만 나올때도 있고,


아예 안나올때도, t1 t2 t3 다 나올때도 있고 그때그떄 다르네요.

(모두 동일한코드에서 실행만했어요)


자바 8 doc도 참고했는데, 

Returns a map of stack traces for all live threads.

라고 해요.


살아있는 쓰레드만 리턴한다니까,

원래 TERMINATED된 쓰레드는 반환되지않는뜻인거같은데 실제로 될때도있어요.


이렇게 자꾸 상황이 바뀌는이유가 뭘까요?


보통 이런건 getallstacktraces() not work 이런식으로 검색하면

stackoverflow같은데에 왜안되는지 이유같은게 잘 나오는경우가 많았어요 이전에는,


getAllStackTraces()는 초천재 프로그래머가 예전에 만들어준 메소드이기 때문에,

같은 조건이라면 모든상황에서 항상 일정한 결과가 나와야하는데 그렇지가않아요...


수정 이력

2019-03-27 17:23:28 에 아래 내용에서 변경 됨 #5

똑같은코드가 어제 잘되던게 오늘 안되는일은 있을수가없잖아요? 

근데 지금 상황이 딱 그래요.

getAllStackTrace();로 분명 TERMINATED된 쓰레드까지 출력이 잘 되다가 안되다가 해요.



public class MainThread 
{
	public static void main(String[] args) throws InterruptedException
	{
		Thread t1 = new Thread("t1");
		Thread t2 = new Thread("t2");
		Thread t3 = new Thread("t3");
		
		t1.start();
		t2.start();
		t3.start();
		
		Set<Thread> threads = Thread.getAllStackTraces().keySet();
		for(Thread thread : threads)
		{
			System.out.println("==================================");
			System.out.println("그룹의 정보 = " + thread.getThreadGroup());
			System.out.println("쓰레드 이름 = " + thread.getName());
			System.out.println("쓰레드 상태 = " + thread.getState());
		}
		System.out.println("==================================");
	}
}


이 똑같은 코드를 계속 실행하면요,


(콘솔화면 전체를 찍었어요)


위처럼 TERMINATED된게 2개만 나올때도있고,

TERMINATED된게 하나만 나올때도 있고,


아예 안나올때도, t1 t2 t3 다 나올때도 있고 그때그떄 다르네요.

(모두 동일한코드에서 실행만했어요)


자바 8 doc도 참고했는데, 

Returns a map of stack traces for all live threads.

라고 해요.


살아있는 쓰레드만 리턴한다니까,

원래 TERMINATED된 쓰레드는 반환되지않는뜻인거같은데 실제로 될때도있어요.


이렇게 자꾸 상황이 바뀌는이유가 뭘까요?

2019-03-27 17:19:06 에 아래 내용에서 변경 됨 #4

getAllStackTrace();로는

TERMINATED된 쓰레드 목록을 얻어올 수 없더라구요.


프로세스내의 모~~~~든 쓰레드 중에서

TERMINATED된 쓰레드의 이름이라도 어떻게 알고싶은대,

알 수 있는 방법이 없을까요?



너무 납득이 안가는게,

똑같은코드가 어제 잘되던게 오늘 안되는일은 있을수가없잖아요? 


근데 지금 상황이 딱 그래요.

getAllStackTrace();로 분명 TERMINATED된 쓰레드까지 출력이 잘 되던게 안되요...


왜안되지 싶어서 제~~일 기본적인 상태에서 코드를 실행해도 여전히안되요..


public class MainThread 
{
	public static void main(String[] args) throws InterruptedException
	{
		Thread t1 = new Thread("t1");
		t1.start();
		Thread t2 = new Thread("t2");
		t2.start();
		Thread t3 = new Thread("t3");
		t3.start();
		
		Thread.sleep(500); // 잠시대기
		//3개의 쓰레드가 모두 종료됬는지 미리 확인
		System.out.println(t1.getState() + " " + t1.getThreadGroup()); 
		System.out.println(t2.getState() + " " + t2.getThreadGroup());
		System.out.println(t3.getState() + " " + t3.getThreadGroup());
		
		Set<Thread> threads = Thread.getAllStackTraces().keySet();
		for(Thread thread : threads)
		{
			System.out.println("==================================");
			System.out.println("그룹의 정보 = " + thread.getThreadGroup());
			System.out.println("쓰레드 이름 = " + thread.getName());
			System.out.println("쓰레드 상태 = " + thread.getState());
		}
		System.out.println("==================================");
	}
}


자바 8 doc도 참고했는데, 

Returns a map of stack traces for all live threads.

라고 해요.


살아있는 쓰레드만 리턴한다니까,

원래 TERMINATED된 쓰레드는 반환되지않는뜻이네요.


그런데 제가 캡쳐를 안해놔서 그런데 아까 분~~명 봤는데...

TERMINATED쓰레드같이출력되는걸...


원래안되는건지 되는거면 위의 테스트코드의 어디가 잘못된건지

꼬옥 알고싶습니다.

2019-03-27 17:07:01 에 아래 내용에서 변경 됨 #3

getAllStackTrace();로는

TERMINATED된 쓰레드 목록을 얻어올 수 없더라구요.


프로세스내의 모~~~~든 쓰레드 중에서

TERMINATED된 쓰레드의 이름이라도 어떻게 알고싶은대,

알 수 있는 방법이 없을까요?



너무 납득이 안가는게,

똑같은코드가 어제 잘되던게 오늘 안되는일은 있을수가없잖아요? 


근데 지금 상황이 딱 그래요.

getAllStackTrace();로 분명 TERMINATED된 쓰레드까지 출력이 잘 되던게

지금 당장이 안되네요.


왜안되지 싶어서 제~~일 기본적인 상태에서 코드를 실행해도 여전히안되네요.


public class MainThread 
{
	public static void main(String[] args) throws InterruptedException
	{
		Thread t1 = new Thread("t1");
		t1.start();
		Thread t2 = new Thread("t2");
		t2.start();
		Thread t3 = new Thread("t3");
		t3.start();
		
		Thread.sleep(500); // 잠시대기
		//3개의 쓰레드가 모두 종료됬는지 미리 확인
		System.out.println(t1.getState() + " " + t1.getThreadGroup()); 
		System.out.println(t2.getState() + " " + t2.getThreadGroup());
		System.out.println(t3.getState() + " " + t3.getThreadGroup());
		
		Set<Thread> threads = Thread.getAllStackTraces().keySet();
		for(Thread thread : threads)
		{
			System.out.println("==================================");
			System.out.println("그룹의 정보 = " + thread.getThreadGroup());
			System.out.println("쓰레드 이름 = " + thread.getName());
			System.out.println("쓰레드 상태 = " + thread.getState());
		}
		System.out.println("==================================");
	}
}


자바 8 doc도 참고했는데, 

Returns a map of stack traces for all live threads.

라고 해요.


원래 TERMINATED된 쓰레드는 반환되지않는대요.

그런데 제가 캡쳐를 안해놔서 그런데 아까 분~~명 봤는데...TERMINATED쓰레드같이출력되는걸...


원래안되나요? 아예 다른방법도 없나요?

2019-03-27 17:01:46 에 아래 내용에서 변경 됨 #2

getAllStackTrace();로는

TERMINATED된 쓰레드 목록을 얻어올 수 없더라구요.


프로세스내의 모~~~~든 쓰레드 중에서

TERMINATED된 쓰레드의 이름이라도 어떻게 알고싶은대,

알 수 있는 방법이 없을까요?



너무 납득이 안가는게,

똑같은코드가 어제 잘되던게 오늘 안되는일은 있을수가없잖아요? 


근데 지금 상황이 딱 그래요.

getAllStackTrace();로 분명 TERMINATED된 쓰레드까지 출력이 잘 되던게

지금 당장이 안되네요.


왜안되지 싶어서 제~~일 기본적인 상태에서 코드를 실행해도 여전히안되네요.


public class MainThread 
{
	public static void main(String[] args) throws InterruptedException
	{
		Thread t1 = new Thread("t1");
		t1.start();
		Thread t2 = new Thread("t2");
		t2.start();
		Thread t3 = new Thread("t3");
		t3.start();
		
		Thread.sleep(500); // 잠시대기
		//3개의 쓰레드가 모두 종료됬는지 미리 확인
		System.out.println(t1.getState() + " " + t1.getThreadGroup()); 
		System.out.println(t2.getState() + " " + t2.getThreadGroup());
		System.out.println(t3.getState() + " " + t3.getThreadGroup());
		
		Set<Thread> threads = Thread.getAllStackTraces().keySet();
		for(Thread thread : threads)
		{
			System.out.println("==================================");
			System.out.println("그룹의 정보 = " + thread.getThreadGroup());
			System.out.println("쓰레드 이름 = " + thread.getName());
			System.out.println("쓰레드 상태 = " + thread.getState());
		}
		System.out.println("==================================");
	}
}


자바 8 doc도 참고했는데, 

Returns a map of stack traces for all live threads.

라고 해요.


원래 TERMINATED된 쓰레드는 반환되지않는대요.


그런데 제가 캡쳐를 안해놔서 그런데 아까 분~~명 봤는데...TERMINATED쓰레드같이출력되는걸...

2019-03-27 17:00:47 에 아래 내용에서 변경 됨 #1

getAllStackTrace();로는

TERMINATED된 쓰레드 목록을 얻어올 수 없더라구요.


프로세스내의 모~~~~든 쓰레드 중에서

TERMINATED된 쓰레드의 이름이라도 어떻게 알고싶은대,

알 수 있는 방법이 없을까요?



너무 납득이 안가는게,

똑같은코드가 어제 잘되던게 오늘 안되는일은 있을수가없잖아요? 


근데 지금 상황이 딱 그래요.

getAllStackTrace();로 분명 TERMINATED된 쓰레드까지 출력이 잘 되던게

지금 당장이 안되네요.


왜안되지 싶어서 제~~일 기본적인 상태에서 코드를 실행해도 여전히안되네요.


public class MainThread 
{
	public static void main(String[] args) throws InterruptedException
	{
		Thread t1 = new Thread("t1");
		t1.start();
		Thread t2 = new Thread("t2");
		t2.start();
		Thread t3 = new Thread("t3");
		t3.start();
		
		Thread.sleep(500); // 잠시대기
		//3개의 쓰레드가 모두 종료됬는지 미리 확인
		System.out.println(t1.getState() + " " + t1.getThreadGroup()); 
		System.out.println(t2.getState() + " " + t2.getThreadGroup());
		System.out.println(t3.getState() + " " + t3.getThreadGroup());
		
		Set<Thread> threads = Thread.getAllStackTraces().keySet();
		for(Thread thread : threads)
		{
			System.out.println("==================================");
			System.out.println("그룹의 정보 = " + thread.getThreadGroup());
			System.out.println("쓰레드 이름 = " + thread.getName());
			System.out.println("쓰레드 상태 = " + thread.getState());
		}
		System.out.println("==================================");
	}
}