JavaRush /Blog Java /Random-VI /Làm cách nào để có được danh sách các chủ đề chết từ Thre...
Dead_MOPO3
Mức độ
Москва

Làm cách nào để có được danh sách các chủ đề chết từ ThreadGroup? cấp 28

Xuất bản trong nhóm
Vâng, thực ra, câu hỏi đã có ngay trong tiêu đề. Ai đã tìm ra nó, hãy nói cho tôi biết. Tôi đã tìm thấy tùy chọn này, nhưng tôi không thích nó chút nào và nó không hoạt động) 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(); } } Hóa ra dòng này Thread[] tgThreads = ( Thread[] ) field.get( tg ); không tạo ra một mảng cho tôi. Tôi đọc được rằng có vẻ như bằng cách nào đó bạn có thể truy cập System.SecurityManager và đặt ReflectPermission("suppressAccessChecks"). nhưng cách tiếp cận quá mã hóa. đến các lĩnh vực riêng tư thông qua sự phản ánh...
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION