Core
ระดับ
Екатеринбург

ThreadGroup

เผยแพร่ในกลุ่ม
สวัสดีตอนบ่ายและสวัสดีปีใหม่! ช่วยให้ฉันเข้าใจเพิ่มเติมอีกเล็กน้อยเกี่ยวกับมัลติเธรดคือ 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