Inggih, bener, pitakonan dhewe ana ing judhul. Sapa sing ngerti, ngomong. Aku ketemu pilihan iki, nanging aku ora kaya iku ing kabeh lan ora bisa)
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(); } }
Pranyata metu sing baris Thread[] tgThreads = ( Thread[] ) field.get( tg );
ora generate Uploaded kanggo kula. Aku maca sing misale jek kaya sampeyan bisa pindhah menyang System.SecurityManager lan nyetel ReflectPermission ("suppressAccessChecks"). nanging pendekatan banget hardcoded. menyang lapangan pribadi liwat refleksi ...
GO TO FULL VERSION