您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

HashMap对于不同的密钥是线程安全的吗?

HashMap对于不同的密钥是线程安全的吗?

在@dotsid的回答中,他说:

如果你以任何方式更改HashMap,则代码将被破坏。

他是正确的。即使线程使用的是不相交的键集,在没有同步的情况下更新的HashMap也会中断。这是一些可能出错的事情。

如果一个线程执行put,则另一线程可能会看到哈希图大小的陈旧值。

一个线程执行put触发表重建的操作时,另一个线程可能会看到哈希表数组引用的瞬时或陈旧版本,其大小,其内容或哈希链。可能会发生混乱。

当线程对put与其他线程使用的某个密钥冲突的密钥执行a操作put,而后一个线程对其密钥进行操作时,则后者可能会看到哈希链引用的陈旧副本。可能会发生混乱。

一个线程使用与其他某个线程的键之一冲突的键探测表时,它可能会在链上遇到该键。它将在该键上调用equals,如果线程不同步,则equals方法可能在该键上遇到陈旧状态。

并且,如果你有两个线程同时执行put或remove请求,则有很多竞争条件的机会。

我可以想到三种解决方案:

其他 2022/1/1 18:14:20 有623人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶