JavaRush /Blog Java /Random-PL /Grupa wątków
Core
Poziom 35
Екатеринбург

Grupa wątków

Opublikowano w grupie Random-PL
Dzień dobry i szczęśliwego nowego roku! Pomóż mi zrozumieć trochę więcej na temat wielowątkowości, a mianowicie ThreadGroup. Wygooglowałem, przeczytałem i zrozumiałem główną istotę: celem jest bezpieczeństwo, zintegrowane zarządzanie poprzez organizację grupy.
Wątki są pogrupowane w grupy wątków ze względów zarządzania i bezpieczeństwa. Jedna grupa wątków może należeć do innej grupy, tworząc hierarchię z grupą główną (systemową) na najwyższym poziomie. Wątkami należącymi do grupy można sterować jednocześnie - masz prawo przerwać pracę wszystkich wątków w grupie na raz lub ustawić dla nich jedną maksymalną wartość priorytetu wykonania. Grupy wątków mogą być również używane do definiowania domen zabezpieczeń. Wątki w obrębie grupy zazwyczaj obdarzone są możliwością wzajemnego oddziaływania, co rozciąga się także na wątki grup zagnieżdżonych. Kiedy mówimy „wpływ”, mamy na myśli, że dowolne wywołanie metody może wpłynąć na zachowanie wątku, na przykład zmienić jego priorytet lub spowodować przerwanie.
(źródło: Tyts )
Aby zapobiec zatrzymywaniu się pojedynczego wątku i przerywaniu wszystkich wątków z rzędu, wprowadzono koncepcję grupy. Wątek może wpływać tylko na wątki znajdujące się w tej samej grupie co on. Grupa wątków jest reprezentowana przez klasę ThreadGroup. Organizacja ta pozwala chronić przepływy przed niepożądanymi wpływami zewnętrznymi. Grupa wątków może zawierać inne grupy, co pozwala na zorganizowanie wszystkich wątków i grup w hierarchiczne drzewo, w którym każdy obiekt ThreadGroup, z wyjątkiem obiektu głównego, ma rodzica.
(źródło: Tyts ) Po przeczytaniu różnych artykułów postanowiłem napisać mały kod, w którym nie będę mógł przerwać przepływów innej grupy z jednego wątku jednej grupy. I coś nie wyszło: pozwala mi przerwać ((( Mój kod: Dlaczego można przerwać? Oto wynik: 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 прервана
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION