Я пытаюсь устранить неполадку, которая, как представляется, связана с удалением объекта из HashMap и последующим возвращением того же объекта с использованием нового ключа. Моя HashMap создается следующим образом:
transactions = new HashMap<Short, TransactionBase>();
Код, который выполняет переназначение, выглядит следующим образом:
transactions.remove(transaction.tran_no);
transaction.tran_no = generate_transaction_id();
transactions.put(transaction.tran_no, transaction);
Периодическое поведение, которое я наблюдаю, состоит в том, что код, который выполняется сразу после этого, который зависит от того, доступен ли объект транзакции, не находит объект транзакции, используя новый идентификатор транзакции. Однако в какой-то момент в будущем транзакция может быть обнаружена. Итак, потянув за соломинку, есть ли какой-нибудь асинхронный эффект для put () или remove, который может вызвать такое поведение?
Я должен отметить, что, насколько мне известно, доступ к контейнеру осуществляется только одним потоком. Я уже прочитал в своей документации, что класс HashMap не "синхронизирован".