클라이언트 연결을 허용하는 서버 프로그램이 있습니다. 이러한 클라이언트 연결은 여러 스트림에 속할 수 있습니다. 예를 들어 둘 이상의 클라이언트가 동일한 스트림에 속할 수 있습니다. 이 스트림들 중에서 하나의 메시지는 전달해야하지만 모든 스트림이 확립 될 때까지 기다려야합니다. 이를 위해 다음과 같은 데이터 구조를 유지합니다.변수가 특정 값에 도달 할 때까지 스레드를 대기시키는 방법 (다중 스레드 Java)
ConcurrentHashMap<Integer, AtomicLong> conhasmap = new ConcurrentHashMap<Integer, AtomicLong>();
Integer는 스트림 ID이고 Long은 클라이언트 번호입니다. AtomicLong이 특정 값에 도달 할 때까지 주어진 스트림에 대한 하나의 스레드를 대기 시키려면 다음 루프를 사용했습니다. 실제로 스트림의 첫 번째 패킷은 스트림 ID와 대기 할 연결 수를 입력합니다. 각 연결마다 대기 연결을 줄입니다.
while(conhasmap.get(conectionID) != new AtomicLong(0)){
// Do nothing
}
그러나이 루프는 다른 스레드를 차단합니다. 이것에 따르면 answer 그것은 휘발성 읽기 않습니다. 특정 값에 도달 할 때까지 주어진 스트림에 대해 올바른 스레드를 대기하도록 코드를 수정하려면 어떻게해야합니까?
같은 출력이 왜 또한 Thread.wait()를 사용하지 않는 얻을 그것은 서버 후 일어나? 덜 우아한 해결책은 잠시 잠을 자고 값을 확인하는 것입니다. – PbxMan
['Condition'] (http : // docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/Condition.html) 아마도? – fge
@PbxMan 서버가 이미 수락 한 스레드를 기다리고 있습니다. 예 잠시 동안 잠을 자고 값을 읽는 것이 효과적 일지 모르지만, 나는 더 나은 길을 찾는다. – user340