我正在尝试在大型代码库中跟踪与集合相关的一些并发问题。
我想用一个替代实现来替换所有的集合/映射,当第三个线程访问它时会抛出异常(或类似的;我可以看到几个可能有效的策略)。有人知道这样做的任何图书馆/工具/策略吗?
我正在考虑在整个代码库中进行搜索替换,并暂时用不同的版本替换对“new HashMap”等内容的任何引用。但也许有更好的方法?
答案 0 :(得分:2)
你可以尝试用ReentrantLock包装HashMap get()和put()方法(或者你使用的方法):
java.util.concurrent.locks.ReentrantLock
class X {
private final ReentrantLock lock = new ReentrantLock();
public void m() {
if ( ! lock.tryLock() ) {
// already locked, hint: lock.isHeldByCurrentThread() ?
}
lock.lock();
try {
// delegate to wrapped hashMap
}
finally {
lock.unlock()
}
}
答案 1 :(得分:2)
由于没有明显的参与者,I made my own:
在大型代码库中,在三小时内发现了29个潜在的并发问题。