JavaRush /Java Blog /Random-ID /Bagaimana cara mendapatkan daftar thread mati dari Thread...
Dead_MOPO3
Level 36
Москва

Bagaimana cara mendapatkan daftar thread mati dari ThreadGroup? tingkat 28

Dipublikasikan di grup Random-ID
Sebenarnya pertanyaannya sendiri ada di judulnya. Siapa yang menemukan jawabannya, beri tahu saya. Saya menemukan opsi ini, tetapi saya tidak menyukainya sama sekali dan tidak berfungsi) 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(); } } Ternyata baris tersebut Thread[] tgThreads = ( Thread[] ) field.get( tg ); tidak menghasilkan array untuk saya. Saya membaca bahwa sepertinya Anda bisa masuk ke System.SecurityManager dan mengatur ReflectPermission("suppressAccessChecks"). tetapi pendekatannya terlalu sulit dikodekan. sampai ke bidang pribadi melalui refleksi...
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION