我正在尝试解决间歇性故障,该故障似乎与从 HashMap 中删除对象然后使用新键放回相同的对象有关。我的 HashMap 创建如下:
transactions = new HashMap<Short, TransactionBase>();
重新分配的代码如下:
transactions.remove(transaction.tran_no);
transaction.tran_no = generate_transaction_id();
transactions.put(transaction.tran_no, transaction);
我看到的间歇性行为是,在此之后立即执行的代码取决于可定位的事务对象似乎没有使用新的事务 ID 找到事务对象。但是,在未来的某个时间点,可以定位交易。因此,拉扯稻草,是否有任何异步影响 put() 或 remove 可能导致这种行为?
我应该提一下,据我所知,容器只被一个线程访问。我已经在他的文档中读到 HashMap 类不是“同步的”。