0
什么是允许从列表(或其他数据结构)上的多个线程进行搜索的一种好方法,但是阻止在列表上搜索并且编辑到不同线程上的列表以进行交织?我尝试在搜索和编辑方法中使用同步块,但尝试在多个线程中运行搜索时可能导致不必要的阻塞。同步搜索和修改
编辑:ReadWriteLock正是我正在寻找!谢谢。
什么是允许从列表(或其他数据结构)上的多个线程进行搜索的一种好方法,但是阻止在列表上搜索并且编辑到不同线程上的列表以进行交织?我尝试在搜索和编辑方法中使用同步块,但尝试在多个线程中运行搜索时可能导致不必要的阻塞。同步搜索和修改
编辑:ReadWriteLock正是我正在寻找!谢谢。
通常,是的ReadWriteLock
已经足够了。
但是,如果您使用的是Java 8,则可以通过新的StampedLock获得性能提升,从而避免读取锁定。这适用于与写入(编辑)相比您有更频繁的读取(搜索)的情况。
private StampedLock sl = new StampedLock();
public void edit() { // write method
long stamp = sl.writeLock();
try {
doEdit();
} finally {
sl.unlockWrite(stamp);
}
}
public Object search() { // read method
long stamp = sl.tryOptimisticRead();
Object result = doSearch(); //first try without lock, search ideally should be fast
if (!sl.validate(stamp)) { //if something has modified
stamp = sl.readLock(); //acquire read lock and search again
try {
result = doSearch();
} finally {
sl.unlockRead(stamp);
}
}
return result;
}
发布您的代码以阐明您正在尝试完成的任务。 – 2014-09-27 00:19:20
使用ReadWriteLock。 – jtahlborn 2014-09-27 01:07:36