Существуют ли какие-либо обертки / коллекции java collection, которые не работают при многопоточном доступе? - PullRequest
3 голосов
/ 03 февраля 2010

Я пытаюсь отследить некоторые проблемы параллелизма, связанные с коллекциями в большой кодовой базе.

Я хотел бы заменить все коллекции / карты альтернативной реализацией, которая выдает исключение, когда 3-й поток обращается к нему (или аналогично; я вижу несколько возможных стратегий, которые могут работать). Кто-нибудь знает какие-либо библиотеки / инструменты / стратегии для этого?

Я думал о поиске-замене во всей кодовой базе и просто временно заменил любую ссылку на такие вещи, как "новый HashMap", на другую версию. Но, может быть, есть лучший способ?

Ответы [ 2 ]

2 голосов
/ 04 февраля 2010

Поскольку очевидных получателей не было, Я сделал свой собственный :

Обнаружил 29 потенциальных проблем параллелизма за три часа на большой базе кода.

2 голосов
/ 03 февраля 2010

Вы можете попытаться обернуть методы get () и put () HashMap (или что вы используете) с ReentrantLock:

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()
         }
     }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...