我FileManager
暴露了一個write
方法,其中包含一個synchronized塊,以防止併發問題:包含同步塊的實例是否需要單例?
class FileManager{
Object lock = new Object();
public void write() {
synchronized (lock) {
String id = nextId();
write(id);
}
}
}
但是,如果存在的FileManager
多個實例,它們的寫入方法仍然可以併發執行。將FileManager設置爲單例可以很好地解決這個可能的併發問題嗎?或者我應該以另一種方式使用syncrhonized
關鍵字?
如果你不想兩個'FileManager'實例能夠運行'write'同時,你可以讓它成爲一個單身人士。或者你可以讓'lock'字段靜態。然後你的'FileManager's將在同一個對象上同步。 – khelwood
任何關於哪個更可取的建議? – ab11