我有这些类,我用它来创建,我想在运行时并发复方编辑
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