我的問題是關於在Java中鎖定對象實例。 我有以下方法,可以在同一時間由多個線程調用。我選擇鎖定一個對象實例,因爲我希望允許併發處理,只要一次只能由一個線程訪問一個實例。對對象實例的java鎖定...這是安全的嗎?
我的簡化代碼就像這樣,我基本上鎖定一個局部變量。 這真的會令我滿意嗎?我一直在閱讀的建議永遠不會鎖定一個可能會改變的對象,我突然不確定這是我究竟做了什麼!
謝謝!
編輯:
哦,親愛的...我只是意識到,我試圖簡化我的郵政代碼可能會有點誤導。
我將以前稱爲「getInstance」的方法重命名爲其他方法(「getFromMap」)以演示方法調用是自定義代碼,該代碼返回對散列表中對象的引用。
上一個答案仍然成立嗎?爲混淆道歉!
public boolean processInput(...) {
if(message == 1) {
Class_0 context = (Class_0)Class_0.getFromMap("xyz");
synchronized(context) {
context.setContextParams("abc");
context.evaluateContextRules(message, this);
}
} else if(message == 2) {
Class_1 context = (Class_1)Class_1.getFromMap("efg");
synchronized(context) {
context.setContextParams("abc");
context.evaluateContextRules(message, this);
}
}
.....
}
這看起來像一個代碼氣味,誠實。爲什麼'TestForInternals_0'有兩種不同的可能類型? – 2012-07-30 13:33:21
我試圖簡化張貼的代碼,並把它弄得一團糟......道歉! – user1563047 2012-07-30 13:37:14
好吧,我想我現在看到它......但這仍然有點臭。也許你可以使用'enum'作爲消息,並在枚舉方法中指定不同的行爲? – 2012-07-30 13:38:41