Development/Java(855)
-
ThreadGroup의 주요 메소드
ThreadGroup의 주요 메소드 · 그룹내에 포함된 모든 스레드들을 쉽게 종료할 수 있지만 스레드의 안전성 문제 때문에 Deprecated된 메소드인 suspend(), resume(), stop()메소드는 가급적 사용하지 않는 것이 좋습니다. · interrupt()메소드로 스레드들을 안전하게 종료하도록 코드를 구성하는 것이 좋습니다.
-
스레드 그룹 일괄 interrupt()
스레드 그룹 일괄 interrupt() · 스레드를 스레드 그룹에 포함시키면 스레드 그룹에서 제공하는 interrupt()메소드를 이용하여 그룹내에 포함된 모든 스레드들을 일괄적으로 interrupt할 수 있습니다. · 예를 들어 10개의 스레드들을 모두 종료시키기 위해서는 각 스레드마다 interrupt()메소드를 10번 호출해야 하지만, 함께 종료시킬 스레들이 같은 스레드 그룹에 소속되어 있다면 스레드 그룹에 interrupt()메소드를 1번 호출해 주면 스레드 그룹의 interrupt()메소드는 포함된 모든 스레드의 interrupt()메소드를 내부적으로 호출해 주어 일괄적으로 interrupt를 수행할 수 있습니다. 스레드 그룹의 interrupt() 메소드는 소속된 스레드의 interrupt()..
-
스레드 그룹 생성, 그룹에 새로운 스레드 추가하기
스레드 그룹 생성· 명시적으로 스레드 그룹을 만들 경우 아래의 생성자 중 하나를 이용하여 ThreadGroup 객체를 만들 수 있습니다.· ThreadGroup 이름만 주거나, 부모 ThreadGroup 과 이름을 매개값으로 해서 스레드 그룹을 생성할 수 있습니다. Thread thread = new Thread(ThreadGroup group, String name); Thread thread = new Thread(ThreadGroup group, Runnable target); Thread thread = new Thread(ThreadGroup group, Runnable target, String name); Thread thread = new Thread(ThreadGroup group, Ru..
-
ReentrantLock 클래스, ReentrantLock 클래스 생성자, 동기화 메소드
ReentrantLock 클래스· 가장 일반적인 lock입니다. · 특정 조건일 때 lock을 풀고 나중에 다시 lock을 얻어 임계역역으로 들어와서 이후의 작업을 수행할 수 있기 때문에 앞에 reentrant(재진입할 수 있는)키워드가 붙었습니다.· ReentrantLock은 배타적인 lock이라서 무조건 lock이 있어야만 임계영역의 코드를 수행할 수 있습니다. 지금까지 배운 lock의 방식과 일치합니다. ReentrantLock 클래스 생성자· 생성자의 매개변수(fair)를 true로 주면, lock이 풀렸을 때 가장 오래 기다린 쓰레드가 lock을 획득하도록 처리합니다. 즉, 공정(fair)상태.· 공정하게 처리하려면 어떤 쓰레드가 가장 오래 기다렸는지 확인하는 과정이 추가적으로 필요하므로 성능은..
-
lock 인터페이스, lock 클래스 종류
lock 인터페이스· JDK 1.5 부터 추가된 동기화 방법· synchroized블럭을 이용한 동기화는 자동적으로 lock이 걸리고 풀리기 때문에 synchronized블럭 내에서 예외가 발생해도 lock이 자동으로 풀립니다. 즉, 같은 메소드내에서만 lock을 걸 수 있습니다. 이런 제약이 불편할 경우 lock 인터페이스를 구현한 클래스를 사용하면 됩니다. Interface Lockhttps://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/Lock.html lock 클래스 종류
-
스레드 그룹 정보 얻기 - getThreadGroup(), Thread.getAllStackTraces()
스레드 그룹 정보 얻기 · getThreadGroup() · Thread.getAllStackTraces() getThreadGroup() 현재 스레드가 속한 스레드 그룹의 이름을 얻고 싶을 때 사용하는 메소드입니다. Map map = Thread.getAllStackTraces();