代码之家  ›  专栏  ›  技术社区  ›  krosenvold

有没有java集合包装器/集合在多线程访问时失败?

  •  3
  • krosenvold  · 技术社区  · 15 年前

    我试图跟踪一些与大型代码库中的集合相关的并发问题。

    我正在考虑在整个代码库中进行搜索替换,只是暂时用不同的版本替换对“new HashMap”之类内容的任何引用。但也许有更好的办法?

    2 回复  |  直到 15 年前
        1
  •  2
  •   stacker    15 年前

    您可以尝试使用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()
             }
         }
    
        2
  •  2
  •   krosenvold    15 年前