이 코드의 경우 메서드를 동기화하는 것이 좋습니까? 고마워.정적 변수에 대해 메소드를 동기화하는 것으로 충분합니까?
class{
private static VariableManager = new VariableManager();
...
static class VariableManager{
private Map<String, Integer> diffCases = new HashMap<String,Integer>();
private int count=0;
public synchronized VariableManager get(){
return this.
}
public synchronized void add(String case, Integer i){
diffCases.put(case, i);
}
public synchronized void increment(){
c++;
}
}
}
public static synchronized void process(){
...
variableManager.add(case, num);
variableManager.count();
}
프로그램이 예상대로 작동하지 않으며 두 정적 변수가 어떻게 든 보호되지 않는다고 생각됩니다. 하나의 스레드를 사용하면 잘 작동합니다.
실마리가 있습니까? 고마워.
두 스레드가 동일한 이벤트 배열을 처리하고 있는데, 'eventsArray'입니다. "프로세스"방법에서는 두 변수가 synchronized 메소드에서 수정됩니다.
은 조금 더 제공한다 : Thread e1 = new Thread(new EventThread(eventsArray, "e1"));
e1.start();
Thread e2 = new Thread(new EventThread(eventsArray, "e2"));
e2.start();
e1.join();
e2.join();
예상대로 작동하지 않는 이유를 설명하십시오. 디버거를 통해 코드를 실행 해보십시오. – Kninnug
다른 코드가 해당지도에 액세스하고 있습니까? 또는 카운트? 제발 그걸 게시 할 수 있니? – radai
기억하십시오 : Hashtable은 동기화되지만 HashMap은 동기화되지 않습니다. – TheEwook