Core
Деңгей
Екатеринбург

ThreadGroup

Топта жарияланған
Қайырлы күн және жаңа жыл құтты болсын! Маған көп ағынды, атап айтқанда ThreadGroup туралы аздап түсінуге көмектесіңіз. Мен Google іздедім, оқыдым және басты мәнін түсіндім: мақсат - қауіпсіздік, топты ұйымдастыру арқылы біріктірілген басқару.
Басқару және қауіпсіздік себептері үшін ағындар ағын топтарына топтастырылған. Бір ағын тобы жоғарғы деңгейде негізгі (жүйелік) топпен иерархия құра отырып, басқа топқа жатуы мүмкін. Топқа жататын ағындарды бір уақытта басқаруға болады - сіз топтағы барлық ағындардың жұмысын бірден тоқтатуға немесе олар үшін орындаудың жалғыз максималды басымдылық мәнін орнатуға құқығыңыз бар. Тақырып топтарын қауіпсіздік домендерін анықтау үшін де пайдалануға болады. Топ ішіндегі жіптерге әдетте өзара әсер ету мүмкіндігі беріледі, ол кірістірілген топтардың ағындарына да таралады. «Әсер ету» дегенде, біз кез келген әдіс шақыруы ағынның әрекетіне әсер етуі мүмкін, айталық, оның басымдылығын өзгерте алады немесе үзіліс тудыруы мүмкін дегенді білдіреді.
(көзі: Tyts )
Бір ағынның тоқтап, қатардағы барлық ағындарды үзуіне жол бермеу үшін топ ұғымы енгізілді. Жіп тек өзімен бір топтағы ағындарға әсер ете алады. Ағын тобы ThreadGroup сыныбы арқылы ұсынылған. Бұл ұйым ағындарды қажетсіз сыртқы әсерлерден қорғауға мүмкіндік береді. Ағын тобында барлық ағындар мен топтарға түбірден басқа әрбір ThreadGroup нысанында ата-анасы бар иерархиялық ағашқа ұйымдастырылуға мүмкіндік беретін басқа топтар болуы мүмкін.
(көзі: Tyts ) Әртүрлі мақалаларды оқығаннан кейін мен бір топтың бір ағынынан басқа топтың ағындарын үзе алмайтын шағын code жазуды шештім. Бірдеңе болмады: ол маған үзуге мүмкіндік береді((( Менің codeым: Неліктен үзуге болады? Міне нәтиже: 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 прервана
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION