각 스레드가 두 개의 숫자에 대한 GCD를 계산하고 TreeMap
에 숫자와 GCD를 저장하고 모든 스레드가 완료된 후에 TreeMap
을 인쇄하는 다중 스레드 프로그램에서 작업하고 있습니다. 어떤 스레드가 동시에 하나의 스레드 만 데이터를 저장하는지 확인하고 어떤 스레드를 사용하여 인쇄 할 준비가되었을 때 TreeMap
을 인쇄 할 수 있습니까?다중 스레드 및 Java 동기화
for (int i = 0; i < myList.size(); ++i) {
for (int j = i + 1; j < myList.size(); ++j) {
modulus1 = myList.get(i);
modulus2 = myList.get(j);
pool.execute(new ThreadProcessRunnable(modulus1, modulus2, myMap));
}
}
public void run() {
ThreadProcess process = null;
try {
// Only one thread should execute the following code
for (Map.Entry<BigInteger, ArrayList<BigInteger>> entry : myMap.entrySet()) {
System.out.println("key ->" + entry.getKey() + ", value->" + entry.getValue());
}
} catch (Exception e) {
System.err.println("Exception ERROR");
}
[동기화] (http://docs.oracle.com/javase/tutorial/essential/concurrency/syncmeth.html) 데이터에 액세스하는 방법 – paulsm4
'for'루프 만 사용해야합니다 'if' 수표? 'List list = myMap.get (FirstModulus); if (list == null) {list = new ArrayList (); myMap.put (FirstModulus, list); } (이 경우'if (myMap.size()> 0) {...} else {...}'의 필요성을 없애고 더 쉽게 읽을 수있게 해줍니다) –
pickypg
이 같은 스레드 통신 토론을 봐 http://stackoverflow.com/questions/12274821/using-a-static-var-in-a-thread-as-communication-among-different-instances – pickypg