JavaRush /Blog Java /Random-MS /ThreadGroup
Core
Tahap
Екатеринбург

ThreadGroup

Diterbitkan dalam kumpulan
Selamat petang dan selamat tahun baru! Bantu saya memahami serba sedikit tentang multithreading iaitu ThreadGroup. Saya Google, membaca, dan memahami intipati utama: tujuannya adalah keselamatan, pengurusan bersepadu melalui organisasi kumpulan.
Benang dikumpulkan ke dalam kumpulan benang atas sebab kebolehurusan dan keselamatan. Satu kumpulan benang boleh tergolong dalam kumpulan lain, membentuk hierarki dengan kumpulan (sistem) utama di peringkat atas. Benang kepunyaan kumpulan boleh dikawal pada masa yang sama - anda mempunyai hak untuk mengganggu kerja semua utas dalam kumpulan sekaligus atau menetapkan satu nilai keutamaan pelaksanaan maksimum untuk mereka. Kumpulan benang juga boleh digunakan untuk menentukan domain keselamatan. Benang dalam kumpulan biasanya dikurniakan kemungkinan pengaruh bersama, yang juga meluas ke rangkaian kumpulan bersarang. Apabila kami menyebut "pengaruh," kami maksudkan bahawa sebarang panggilan kaedah boleh menjejaskan gelagat benang, katakan, menukar keutamaannya atau menyebabkan gangguan.
(sumber: Tyts )
Untuk mengelakkan satu utas daripada mula berhenti dan mengganggu semua utas berturut-turut, konsep kumpulan telah diperkenalkan. Satu utas hanya boleh mempengaruhi utas yang berada dalam kumpulan yang sama dengannya. Kumpulan benang diwakili oleh kelas ThreadGroup. Organisasi ini membolehkan anda melindungi aliran daripada pengaruh luar yang tidak diingini. Kumpulan utas boleh mengandungi kumpulan lain, membenarkan semua utas dan kumpulan disusun ke dalam pepohon hierarki di mana setiap objek ThreadGroup, kecuali yang akar, mempunyai induk.
(sumber: Tyts ) Selepas membaca pelbagai artikel, saya memutuskan untuk menulis kod kecil di mana saya tidak akan dapat mengganggu aliran kumpulan lain dari satu utas satu kumpulan. Dan ada sesuatu yang tidak berjaya: ia membolehkan saya mengganggu((( Kod saya: Mengapa mungkin untuk mengganggu? Berikut ialah outputnya: 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 прервана
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION