JavaRush /Java Blog /Random-KO /스레드 그룹
Core
레벨 35
Екатеринбург

스레드 그룹

Random-KO 그룹에 게시되었습니다
안녕하세요! 새해 복 많이 받으세요! 멀티스레딩, 즉 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