JavaRush /Java Blog /Random-TL /Paano makakuha ng isang listahan ng mga patay na thread m...
Dead_MOPO3
Antas
Москва

Paano makakuha ng isang listahan ng mga patay na thread mula sa isang ThreadGroup? antas 28

Nai-publish sa grupo
Well, actually, ang tanong mismo ay nasa pamagat. Sino ang nakaisip nito, sabihin sa akin. Natagpuan ko ang pagpipiliang ito, ngunit hindi ko ito gusto at hindi ito gumagana) 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(); } } Lumalabas na ang linya Thread[] tgThreads = ( Thread[] ) field.get( tg ); ay hindi bumubuo ng isang array para sa akin. Nabasa ko na tila maaari kang pumunta sa System.SecurityManager at itakda ang ReflectPermission("suppressAccessChecks"). ngunit ang diskarte ay masyadong hardcoded. pumunta sa mga pribadong larangan sa pamamagitan ng pagmuni-muni...
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION