Core
Level 35
Екатеринбург

Grup Utas

Dipublikasikan di grup Random-ID
Selamat siang dan selamat tahun baru! Bantu saya sedikit lebih memahami tentang multithreading yaitu ThreadGroup. Saya mencari di Google, membaca, dan memahami esensi utama: tujuannya adalah keamanan, manajemen terpadu melalui pengorganisasian grup.
Utas dikelompokkan ke dalam grup utas untuk alasan pengelolaan dan keamanan. Satu grup thread dapat menjadi milik grup lain, membentuk hierarki dengan grup (sistem) utama di tingkat atas. Thread milik grup dapat dikontrol secara bersamaan - Anda berhak menghentikan pekerjaan semua thread dalam grup sekaligus atau menetapkan satu nilai prioritas eksekusi maksimum untuk thread tersebut. Grup thread juga dapat digunakan untuk menentukan domain keamanan. Utas dalam suatu kelompok biasanya diberkahi dengan kemungkinan saling mempengaruhi, yang juga meluas ke utas kelompok yang bersarang. Saat kami mengatakan "mempengaruhi", yang kami maksud adalah bahwa pemanggilan metode apa pun dapat memengaruhi perilaku thread, misalnya, mengubah prioritasnya, atau menyebabkan interupsi.
(sumber: Tyts )
Untuk mencegah satu thread mulai berhenti dan mengganggu semua thread dalam satu baris, konsep grup diperkenalkan. Sebuah thread hanya dapat mempengaruhi thread yang berada dalam grup yang sama dengannya. Grup thread diwakili oleh kelas ThreadGroup. Organisasi ini memungkinkan Anda untuk melindungi aliran dari pengaruh eksternal yang tidak diinginkan. Grup thread dapat berisi grup lain, sehingga semua thread dan grup dapat diatur ke dalam pohon hierarki di mana setiap objek ThreadGroup, kecuali objek root, memiliki induk.
(sumber: Tyts ) Setelah membaca berbagai artikel, saya memutuskan untuk menulis kode kecil di mana saya tidak akan dapat mengganggu aliran grup lain dari satu thread di satu grup. Dan ada sesuatu yang tidak berhasil: memungkinkan saya untuk menginterupsi((( Kode saya: Mengapa bisa menginterupsi? Inilah hasilnya: 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 прервана
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION