JavaRush /مدونة جافا /Random-AR /مجموعة المواضيع
Core
مستوى
Екатеринбург

مجموعة المواضيع

نشرت في المجموعة
مساء الخير وسنة جديدة سعيدة! ساعدني في فهم المزيد عن تعدد مؤشرات الترابط، أي ThreadGroup. لقد بحثت في Google وقرأت وفهمت الجوهر الرئيسي: الهدف هو الأمن والإدارة المتكاملة من خلال تنظيم المجموعة.
يتم تجميع سلاسل الرسائل في مجموعات سلاسل رسائل لأسباب تتعلق بالإدارة والأمان. يمكن أن تنتمي مجموعة سلاسل رسائل واحدة إلى مجموعة أخرى، مما يشكل تسلسلًا هرميًا مع المجموعة الرئيسية (النظام) في المستوى الأعلى. يمكن التحكم في سلاسل الرسائل التي تنتمي إلى مجموعة في نفس الوقت - لديك الحق في مقاطعة عمل جميع سلاسل الرسائل في المجموعة مرة واحدة أو تعيين قيمة قصوى واحدة لأولوية التنفيذ لها. يمكن أيضًا استخدام مجموعات الخيوط لتحديد مجالات الأمان. عادةً ما تتمتع الخيوط داخل المجموعة بإمكانية التأثير المتبادل، والذي يمتد أيضًا إلى خيوط المجموعات المتداخلة. عندما نقول "التأثير"، فإننا نعني أن أي استدعاء أسلوب يمكن أن يؤثر على سلوك الخيط، على سبيل المثال، تغيير أولويته، أو التسبب في انقطاعه.
(المصدر: تيتس )
لمنع توقف خيط واحد ومقاطعة جميع سلاسل الرسائل المتتالية، تم تقديم مفهوم المجموعة. يمكن أن يؤثر مؤشر الترابط فقط على سلاسل الرسائل الموجودة في نفس المجموعة. يتم تمثيل مجموعة مؤشرات الترابط بواسطة فئة ThreadGroup. تتيح لك هذه المنظمة حماية التدفقات من التأثيرات الخارجية غير المرغوب فيها. يمكن أن تحتوي مجموعة سلاسل الرسائل على مجموعات أخرى، مما يسمح بتنظيم جميع سلاسل الرسائل والمجموعات في شجرة هرمية يكون فيها كل كائن ThreadGroup، باستثناء الكائن الجذر، له أصل.
(المصدر: Tyts ) بعد قراءة مقالات مختلفة، قررت أن أكتب رمزًا صغيرًا لن أتمكن فيه من مقاطعة تدفقات مجموعة أخرى من موضوع واحد لمجموعة واحدة. ولم ينجح شيء ما: فهو يسمح لي بالمقاطعة ((( الرمز الخاص بي: لماذا من الممكن المقاطعة؟ إليك الإخراج: 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