CODEDRAGON ㆍDevelopment/Java
ReentrantLock과 Condition
· 서로 다른 쓰레드를 구분해서 동기화 통지를 할 수 있게 해주는 것이 Condition입니다.
· wait()와 notify()메소드로 스레드의 종류를 구분하지 않고, 공유 객체의 waiting pool에 같이 몰아넣는 대신 각 쓰레드를 위한 Condition을 만들어서 각각의 waiting pool에서 따로 기다리도록 하면 문제가 해결됩니다.
· wait()와 notify()메소드는 요리사 쓰레드와 손님쓰레드를 구분해서 통지하지 못하는 단점이 있었습니다. wait()와 notify()메소드로 스레드의 종류를 구분하지 않고, 공유 객체의 waiting pool에 같이 몰아넣는 대신
· 손님 쓰레드를 위한 Condition과 요리사 쓰레드를 위한 Condition을 만들어서 각각의 waiting pool에서 따로 기다리도록 하면 문제가 해결됩니다.
Condition 생성
Condition은 이미 생성된 lock을 통해 newCondition() 메소드를 호출해서 생성합니다.
//lock 생성 private RentrantLock lock = new RentrantLock(); //lock으로 부터 Condition 생성 private Condition myCondition1 = lock.newCondition(); private Condition myCondition2 = lock.newCondition();
|
동기화 메소드
wait()와 notify()메소드 대신 Condition의 await()와 signal()메소드를 사용하면 됩니다.
Object |
Condition |
void wait() |
void await() void awaitUninterruptibly() |
void wait(long timeout) |
boolean await(long time, TiemUnit unit) long awaitNanos(long nanosTimeout) boolean awaitUntil(Date deadline) |
void notify() |
void signal() |
void notifyAll() |
void signalAll() |
'Development > Java' 카테고리의 다른 글
InputStream의 주요 메서드 (0) | 2018.12.11 |
---|---|
Damon Thread(데몬 스레드), 데몬 스레드 예, setDaemon(), isDaemon() (0) | 2018.12.11 |
synchronized블럭 vs ReentrantLock과 같은 lock클래스 (0) | 2018.12.11 |
lock()와 unlock( )를 통한 동기화블록 (0) | 2018.12.11 |
ThreadGroup의 주요 메소드 (0) | 2018.12.11 |