JavaRush /Blog Java /Random-MS /Bagaimana untuk mendapatkan senarai benang mati daripada ...
Dead_MOPO3
Tahap
Москва

Bagaimana untuk mendapatkan senarai benang mati daripada ThreadGroup? tingkatan 28

Diterbitkan dalam kumpulan
Sebenarnya, soalan itu sendiri adalah dalam tajuk. Siapa yang tahu, beritahu saya. Saya dapati pilihan ini, tetapi saya tidak menyukainya sama sekali dan ia 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 garis itu Thread[] tgThreads = ( Thread[] ) field.get( tg ); tidak menjana tatasusunan untuk saya. Saya membaca bahawa nampaknya anda boleh pergi ke System.SecurityManager dan menetapkan ReflectPermission("suppressAccessChecks"). tetapi pendekatannya terlalu keras. pergi ke medan peribadi melalui refleksi...
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION