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

ThreadGroup

Группада жарыяланган
Кутмандуу күн жана жаңы жылыңыз менен! Мага ThreadGroup, тактап айтканда, multithreading жөнүндө бир аз көбүрөөк түшүнүүгө жардам бериңиз. Мен Google'да издедим, окуп чыктым жана негизги маңызын түшүндүм: максаты коопсуздук, топту уюштуруу аркылуу комплекстүү башкаруу.
Жиптер башкаруу жана коопсуздук себептери үчүн жип топторуна топтоштурулган. Бир жип тобу жогорку деңгээлдеги негизги (системалык) топ менен иерархияны түзүп, башка топко таандык болушу мүмкүн. Топко таандык жиптерди бир эле учурда көзөмөлдөсө болот - сиз топтун бардык жиптеринин ишин бир убакта үзгүлтүккө учуратууга же алар үчүн аткаруунун бир гана максималдуу артыкчылыктуу маанисин коюуга укугуңуз бар. Жип топтору коопсуздук домендерин аныктоо үчүн да колдонулушу мүмкүн. Топтун ичиндеги жиптер, адатта, өз ара таасир берүү мүмкүнчүлүгүнө ээ, ал ошондой эле уяланган топтордун жиптерине да жайылтылат. "Таасир" деп айтканда, биз ар кандай ыкма чалуу жиптин жүрүм-турумуна таасир этиши мүмкүн, айталы, анын приоритеттүүлүгүн өзгөртүшү же үзгүлтүккө учурашы мүмкүн экенин билдирет.
(булак: Tyts )
Бир жиптин токтой башташы жана катардагы бардык жиптердин үзгүлтүккө учурашына жол бербөө үчүн топ түшүнүгү киргизилген. Жип аны менен бир топко кирген жиптерге гана таасир эте алат. Жип тобу ThreadGroup классы менен көрсөтүлөт. Бул уюм агымдарды керексиз тышкы таасирлерден коргоого мүмкүндүк берет. Жип тобу башка топторду камтышы мүмкүн, бул бардык жиптерди жана топторду тамырдан башка ар бир ThreadGroup an objectисинин ата-энеси бар иерархиялык даракка уюштурууга мүмкүндүк берет.
(булак: 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