내 응용 프로그램에는 런타임 중에 독립적 인 작업을 수행하는 여러 스레드 (이 예제에서는 7 개)가 포함됩니다. 그러나 가끔씩 스레드는 데이터를 동기화해야합니다.시간, 횟수 또는 다른 여러 스레드를 기다리는 모범 사례가 있습니까?
이것은 모두 참조가있는 DataSynchronizer 개체를 호출하는 스레드에 의해 수행됩니다. 이 클래스의 흐름에 대한
내 생각은 다음과 같습니다
public class DataSynchronizer {
public void synchronizeData(List<Data> threadData) {
// Wait for all 7 threads to call this method
// When all 7 are here, hold them here & do work using one of the threads
// or a new anonymous thread
// Release the threads & let them continue their independent work
}
}
내 질문은, 싱크 작업을 수행하기 전에 '모든 X 스레드 대기'하는 가장 좋은 방법은 무엇입니까?
모든 스레드가 서로 최대 1 초 내에 synchronizeData 메서드를 호출한다는 것을 알고 있습니다.
그래서 내가
1) 이제 도착한 첫 번째 스레드 후 2 초 기다립니다 메서드를 호출하고 모든 스레드를 생각합니까? 또는
2) 모든 활성 스레드가 도착했는지 확인하십시오. (방금 메서드를 호출하기 전에 스레드가 충돌하는 경우 응용 프로그램이 영원을 기다립니다.)
3) Count + timeout?
4)
넌 7 .. – TheLostMind
중복 가능성의 값이 [CountDownLatch를 (http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CountDownLatch.html)를 사용할 수도 [양식의 불투명도를 설정할 때 십진수 또는 두 자리를 사용해야합니까?] (http://stackoverflow.com/questions/4/when-setting-a-forms-opacity-should-i-use-a-decimal-or) -Double) – Unihedron