ReentrantLock과 Condition, 동기화 메소드

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()