對於此代碼,是否足以同步該方法?非常感謝。同步靜態變量的方法是否夠用了?
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'。在「過程」方法中,兩個變量在同步方法中被修改。
爲了提供更多一點:
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