JavaRush /Java Blog /Random-KO /ThreadGroup에서 죽은 스레드 목록을 얻는 방법은 무엇입니까? 레벨 28
Dead_MOPO3
레벨 36
Москва

ThreadGroup에서 죽은 스레드 목록을 얻는 방법은 무엇입니까? 레벨 28

Random-KO 그룹에 게시되었습니다
글쎄, 사실 질문 자체가 제목에 있습니다. 누가 알아냈는지 말해 보세요. 이 옵션을 찾았지만 전혀 마음에 들지 않고 작동하지 않습니다.) 이 라인이 배열을 생성하지 않는 public static void main(String[] args) { /* * For testing purposes */ ThreadGroup tg = new ThreadGroup( "MyThreadGroup" ); Thread subThread = new Thread( tg, "New Thread - Inactive" ); try { /* * GETTING THREADS - PROBABLY BETTER TO GET IT BY USING * getDeclaredFields() AND LOOPING TILL GET ONE OF TYPE * Thread[] SINCE A FUTURE VERSION MIGHT CHANGE THE NAME * BUT SINCE IS PACKAGE-LEVEL ACCESS, IT'S PROBABLY USED * ELSEWHERE IN THE PACKAGE, AND THIS IS JUST AN EXAMPLE */ Field field = tg.getClass().getDeclaredField( "threads" ); //NEED TO SUPPRESS ACCESS CHECKS field.setAccessible( true ); //EVEN IF SECURITY IS OFF YOU NEED THIS!!!! Thread[] tgThreads = ( Thread[] ) field.get( tg ); for ( int i = 0; i < tgThreads.length; i++ ) { if ( tgThreads[ i ] != null ) System.out.println( tgThreads[ i ].getName() + " = " + tgThreads[ i ].isAlive() ); } } catch (NoSuchFieldException nsfe) { nsfe.printStackTrace(); } catch (IllegalAccessException iae) { iae.printStackTrace(); } } 것으로 나타났습니다 . Thread[] tgThreads = ( Thread[] ) field.get( tg );어떻게든 System.SecurityManager에 가서 ReflectPermission("suppressAccessChecks")을 설정할 수 있는 것 같다는 내용을 읽었습니다. 하지만 접근 방식이 너무 하드코딩되어 있습니다. 리플렉션을 통해 비공개 필드에 접근합니다...
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION