2018/12/11(12)
-
ReentrantLock과 Condition, 동기화 메소드
ReentrantLock과 Condition · 서로 다른 쓰레드를 구분해서 동기화 통지를 할 수 있게 해주는 것이 Condition입니다. · wait()와 notify()메소드로 스레드의 종류를 구분하지 않고, 공유 객체의 waiting pool에 같이 몰아넣는 대신 각 쓰레드를 위한 Condition을 만들어서 각각의 waiting pool에서 따로 기다리도록 하면 문제가 해결됩니다. · wait()와 notify()메소드는 요리사 쓰레드와 손님쓰레드를 구분해서 통지하지 못하는 단점이 있었습니다. wait()와 notify()메소드로 스레드의 종류를 구분하지 않고, 공유 객체의 waiting pool에 같이 몰아넣는 대신 · 손님 쓰레드를 위한 Condition과 요리사 쓰레드를 위한 Conditi..
-
synchronized블럭 vs ReentrantLock과 같은 lock클래스
synchronized블럭 vs ReentrantLock과 같은 lock클래스 대부분의 경우 lock()과 unlock()대신 synchronized블럭을 사용할 수 있습니다. 이때는 synchronized블럭을 사용하는 것이 성능상 더 좋을 수 있습니다.
-
lock()와 unlock( )를 통한 동기화블록
lock()와 unlock( )를 통한 동기화블록· synchronized키워드를 대체할 수 있는 방법입니다.· Java Ver 5.0 이후부터 제공되는 동기화 방식입니다.· lock 메소드와 unlock 메소드의 호출을 통해서 동기화 블록을 구성합니다.· ReentrantLock 인스턴스 를 이용한 동기화 기법입니다.· 임계영역 내에서 예외가 발생하거나 return문으로 빠져 나가게 되면 lock이 풀리지 않을 수 있으므로 unlock()은 try~catch()문으로 감싸는 것이 일반적입니다. try블럭내에서 어떤 일이 발생해도 finally블럭에 있는 unlock()이 수행되기 때문에 lock이 풀리지 않는 일은 발생하지 않습니다.·
-
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..