JavaRush /Blog Java /Random-VI /Nhóm chủ đề
Core
Mức độ
Екатеринбург

Nhóm chủ đề

Xuất bản trong nhóm
Chào buổi chiều và năm mới vui vẻ! Giúp mình hiểu thêm một chút về đa luồng, cụ thể là ThreadGroup. Tôi đã tìm kiếm, đọc và hiểu bản chất chính trên Google: mục đích là bảo mật, quản lý tích hợp thông qua việc tổ chức một nhóm.
Các chủ đề được nhóm thành các nhóm chủ đề vì lý do quản lý và bảo mật. Một nhóm luồng có thể thuộc về một nhóm khác, tạo thành một hệ thống phân cấp với nhóm (hệ thống) chính ở cấp cao nhất. Các luồng thuộc một nhóm có thể được kiểm soát cùng lúc - bạn có quyền làm gián đoạn công việc của tất cả các luồng trong nhóm cùng một lúc hoặc đặt một giá trị ưu tiên thực thi tối đa duy nhất cho chúng. Các nhóm luồng cũng có thể được sử dụng để xác định miền bảo mật. Các luồng trong một nhóm thường có khả năng ảnh hưởng lẫn nhau, điều này cũng mở rộng đến các luồng của các nhóm lồng nhau. Khi chúng tôi nói "ảnh hưởng", chúng tôi muốn nói rằng bất kỳ cuộc gọi phương thức nào cũng có thể ảnh hưởng đến hành vi của luồng, chẳng hạn như thay đổi mức độ ưu tiên của nó hoặc gây gián đoạn.
(nguồn: Tyts )
Để ngăn chặn một luồng đơn bắt đầu dừng và làm gián đoạn tất cả các luồng liên tiếp, khái niệm về một nhóm đã được đưa ra. Một thread chỉ có thể ảnh hưởng đến các thread cùng nhóm với nó. Một nhóm luồng được đại diện bởi lớp ThreadGroup. Tổ chức này cho phép bạn bảo vệ các luồng khỏi những ảnh hưởng bên ngoài không mong muốn. Một nhóm luồng có thể chứa các nhóm khác, cho phép tất cả các luồng và nhóm được tổ chức thành một cây phân cấp trong đó mỗi đối tượng ThreadGroup, ngoại trừ đối tượng gốc, đều có một đối tượng cha.
(nguồn: Tyts ) Sau khi đọc nhiều bài báo khác nhau, tôi quyết định viết một đoạn mã nhỏ trong đó tôi không thể làm gián đoạn luồng của một nhóm khác từ một luồng của một nhóm. Và có điều gì đó không ổn: nó cho phép tôi làm gián đoạn((( Mã của tôi: Tại sao có thể làm gián đoạn? Đây là đầu ra: public class Test { public static ArrayList threads = new ArrayList (); public static ArrayList groups = new ArrayList (); public static void main(String[] args) throws InterruptedException { final ThreadGroup group1 = new ThreadGroup("GROUP 1"); final ThreadGroup group2 = new ThreadGroup("GROUP 2"); final ThreadGroup group3 = new ThreadGroup("GROUP 3"); groups.add(group1); groups.add(group2); groups.add(group3); for (int i = 0; i < groups.size(); i++) { for (int j = 1; j < 5; j++) { Thread thread = new Thread(groups.get(i), "THREAD №" + j) { @Override public void run() { while (!isInterrupted()) { try { Thread.sleep(500); } catch (InterruptedException e) { System.out.println(getName() + " : " + getThreadGroup().getName() + " прервана"); } } } }; threads.add(thread); thread.start(); } } Thread thread = new Thread(group1, "THREAD №5") { @Override public void run() { group2.interrupt(); while (true); } }; thread.start(); threads.add(thread); for (Thread t : threads) System.out.println(t); } } Thread[THREAD №1,5,GROUP 1] Thread[THREAD №2,5,GROUP 1] Thread[THREAD №3,5,GROUP 1] Thread[THREAD №4,5,GROUP 1] Thread[THREAD №1,5,GROUP 2] Thread[THREAD №2,5,GROUP 2] Thread[THREAD №3,5,GROUP 2] Thread[THREAD №4,5,GROUP 2] Thread[THREAD №1,5,GROUP 3] Thread[THREAD №2,5,GROUP 3] Thread[THREAD №3,5,GROUP 3] Thread[THREAD №4,5,GROUP 3] Thread[THREAD №5,5,GROUP 1] THREAD №1 : GROUP 2 прервана THREAD №2 : GROUP 2 прервана THREAD №4 : GROUP 2 прервана THREAD №3 : GROUP 2 прервана
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION