반응형

notify

    규칙 69 - wait나 notify 대신 병행성 유틸리티를 이용하라.

    멀티 쓰레드 환경에서 wait와 notify를 사용할 경우에 주의가 필요하다. 하지만 그것을 효율적으로 사용하기에는 많은 어려움이 따른다. 그렇기 위해서 wait와 notify를 정확하게 사용하기 위해서는 high-level util(고수준 유틸리티)을 사용해야 한다.이런 고수준 유틸리티들은 Executor, Concurrent Colloection, Synchronizer를 통해 사용할 수 있다.그중 Conncurrent Collenction (병행 컬렉션)에 대해 알아보자. 대부분에 컬렉션 Map, List, Queue등은 병행 컬렉션을 제공한다. 병행성 컬렉션대표적으로 Map에서 제공하는 ConcurrentMap이다. 그중 putIfAbsent(key, value) 메서드가 대표적이다. 이 메서드는..

    Thread wait(), notify() 소개

    문제점하나의 쓰레드가 객체에 lock 을 걸고 어떤 조건이 만족될 때까지 기다려야 하는 경우, 이 쓰레드를 그대로 놔두면 이 객체를 사용하려는 다른 쓰레드들은 lock이 풀릴 때 까지 같이 기다려야 하는 상황이 발생 해결책 이런 비효율을 개선하기 위해서 wait()와 notify()를 사용한다. 한 쓰레드가 객체에 lock을 걸고 오래 기다리는 대신 wait()을 호출해서 다른 쓰레드에게 제어권을 넘겨주고 대기상태로 기다리다가 다른 쓰레드에 의해서 notify() 가 호출 되면 다시 실행 상태가 되도록 하는 것이다. wait(), notify(), notifyAll()- object 클래스에 정의된 메소드이므로 모든 객체에서 호출이 가능하다.- 동기화 블록(synchronized블록) 내에서만 사용이 가..

반응형