JavaRush /בלוג Java /Random-HE /קבוצת שרשורים
Core
רָמָה
Екатеринбург

קבוצת שרשורים

פורסם בקבוצה
צהריים טובים ושנה טובה! עזור לי להבין קצת יותר על ריבוי שרשורים, כלומר ThreadGroup. חיפשתי בגוגל, קראתי והבנתי את המהות העיקרית: המטרה היא אבטחה, ניהול משולב באמצעות ארגון של קבוצה.
השרשורים מקובצים לקבוצות שרשורים מטעמי ניהול ואבטחה. קבוצת חוטים אחת יכולה להשתייך לקבוצה אחרת, ויוצרות היררכיה עם הקבוצה הראשית (מערכת) ברמה העליונה. ניתן לשלוט בשרשורים השייכים לקבוצה בו-זמנית - יש לך את הזכות להפסיק את העבודה של כל השרשורים בקבוצה בבת אחת או להגדיר עבורם ערך עדיפות ביצוע מקסימלי בודד. ניתן להשתמש בקבוצות שרשורים גם להגדרת תחומי אבטחה. שרשורים בתוך קבוצה ניחנים בדרך כלל באפשרות של השפעה הדדית, שמתפרשת גם על חוטים של קבוצות מקוננות. כשאנו אומרים "השפעה", אנו מתכוונים שכל קריאת שיטה יכולה להשפיע על התנהגות השרשור, למשל, לשנות את העדיפות שלו, או לגרום להפרעה.
(מקור: Tyts )
כדי למנוע משרשור בודד להתחיל לעצור ולקטוע את כל השרשורים ברצף, הוצג המושג של קבוצה. שרשור יכול להשפיע רק על שרשורים שנמצאים באותה קבוצה שלו. קבוצת שרשור מיוצגת על ידי המחלקה 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