JavaRush /Java-Blog /Random-DE /ThreadGroup
Core
Level 35
Екатеринбург

ThreadGroup

Veröffentlicht in der Gruppe Random-DE
Guten Tag und ein frohes neues Jahr! Helfen Sie mir, etwas mehr über Multithreading zu verstehen, nämlich ThreadGroup. Ich habe gegoogelt, gelesen und das Wesentliche verstanden: Der Zweck ist Sicherheit, integriertes Management durch die Organisation einer Gruppe.
Threads werden aus Gründen der Verwaltbarkeit und Sicherheit in Thread-Gruppen gruppiert. Eine Thread-Gruppe kann zu einer anderen Gruppe gehören und eine Hierarchie mit der Hauptgruppe (Systemgruppe) auf der obersten Ebene bilden. Threads, die zu einer Gruppe gehören, können gleichzeitig gesteuert werden – Sie haben das Recht, die Arbeit aller Threads in der Gruppe auf einmal zu unterbrechen oder einen einzelnen maximalen Ausführungsprioritätswert für sie festzulegen. Thread-Gruppen können auch zum Definieren von Sicherheitsdomänen verwendet werden. Threads innerhalb einer Gruppe sind in der Regel mit der Möglichkeit der gegenseitigen Beeinflussung ausgestattet, was sich auch auf Threads verschachtelter Gruppen erstreckt. Wenn wir „Einfluss“ sagen, meinen wir, dass jeder Methodenaufruf das Verhalten des Threads beeinflussen kann, beispielsweise seine Priorität ändern oder eine Unterbrechung verursachen kann.
(Quelle: Tyts )
Um zu verhindern, dass ein einzelner Thread alle Threads hintereinander stoppt und unterbricht, wurde das Konzept einer Gruppe eingeführt. Ein Thread kann nur Threads beeinflussen, die in derselben Gruppe wie er sind. Eine Thread-Gruppe wird durch die ThreadGroup-Klasse dargestellt. Mit dieser Organisation können Sie Ströme vor unerwünschten äußeren Einflüssen schützen. Eine Thread-Gruppe kann andere Gruppen enthalten, sodass alle Threads und Gruppen in einem hierarchischen Baum organisiert werden können, in dem jedes ThreadGroup-Objekt außer dem Stammobjekt ein übergeordnetes Objekt hat.
(Quelle: Tyts ) Nachdem ich verschiedene Artikel gelesen hatte, beschloss ich, einen kleinen Code zu schreiben, der es mir nicht ermöglichen würde, die Abläufe einer anderen Gruppe von einem Thread einer Gruppe aus zu unterbrechen. Und etwas hat nicht geklappt: Es erlaubt mir zu unterbrechen((( Mein Code: Warum ist es möglich zu unterbrechen? Hier ist die Ausgabe: 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 прервана
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION