我有這些類,我用它來創建,我想在運行時併發複方編輯
Class Person
String name
Pet[] pets
Class Pet
String name
Person[] owners
boolean neutered
存儲起初,我用這些包含HashMap將它們存儲
HashMap people
HashMap pets
對象,但我想要的使實現併發所以我改變這些地圖像這樣
ConcurrentHashMap people
ConcurrentHashMap pets
我用"compareAndSet in a while loop" pattern
進行原子更新。
但我仍然有一個問題,因爲我的People
地圖中的每個人都有Pets
地圖中的相關寵物。爲了保持更新原子我加ReentrantReadWriteLocks
,這樣我可以同時更新與相關Pet
對象People
對象。
ConcurrentHashMap people
ConcurrentHashMap peopleLocks
ConcurrentHashMap pets
ConcurrentHashMap petLocks
現在,當我在多個記錄進行編輯,我首先抓住所有的寫鎖,然後我讓我的編輯,最後釋放寫入鎖。這可確保在進行更新時不會讀取數據。
changePetNames(Person person, Pets[] pets, String[] names) {
// get Person lock
// get Pet locks
// make updates
// release locks
}
neuter(Pets[] pets) {
// get Pet locks
// make updates
// release locks
然後我有我所有的編輯方法實現同步一個物體上,使競爭的修改將不會死鎖
private final Object leash = new Object();
changePetNames(Person person, Pets[] pets, String[] names) {
synchronized(leash) {
// get Person lock
// get Pet locks
// make updates
// release locks
}
}
neuter(Pets[] pets) {
synchronized(leash) {
// get Pet locks
// make updates
// release locks
}
}
所以現在我有運行的存儲,允許併發讀取和寫入同步。我的問題是,是否有辦法使寫入同時進行,同時保護人與寵物之間的關係。
謝謝,meriton。我重新陷入僵局。 – Rapier 2009-12-27 18:53:02