我有一个java.util.HashMap
个对象。我保证写入HashMap
是由单个专用线程完成的。但是,从同一个HashMap
对象读取可以从当时的多个线程中完成。有这样的实施可以解决任何问题吗?
答案 0 :(得分:0)
是的,你可以通过这样的实现遇到大麻烦!
向HashMap添加值不是原子操作。因此,如果您从另一个线程读取映射,则当另一个线程同时添加值时,您可能会看到不一致的状态。这将导致运行代码时出现意外的意外行为或异常。此外,如果没有同步,则无法保证更新的变量对其他线程可见。
正如11thdimenstion在您的问题评论中所述,您应该将ConcurrentHashMap
用于您的目的,或者正确地同步您对地图的读取和写入权限。