问题描述
Astructuralmodificationisanyoperation*thataddsordeletesoneormoremappings;merelychangingthevalue*associatedwithakeythataninstancealreadycontainsisnota*structuralmodification.这句话意思是不是只改变VALUE,就可以多线程访问了?
解决方案
解决方案二:
这个是讲HashMap什么时候是结构上的改变:添加删除键值对是结构性的改变。修改一个已经存在的键对应的值,不是结构上的改变。这里没有提多线程的问题。HashMap是非线程安全的,如果想多线程安全的使用HashMap,使用java.util.concurrent.ConcurrentHashMap<K,V>从HashMap到ConcurrentHashMap:Mapmap=Collections.synchronizedMap(hashMap);
解决方案三:
结构上修改的操作指添加或删除一个或多个映射;仅仅改变该值带key,一个实例已经包含关联不是结构改造。
解决方案四:
<p><strong>Notethatthisimplementationisnotsynchronized.</strong>*Ifmultiplethreadsaccessahashmapconcurrently,andatleastoneof*thethreadsmodifiesthemapstructurally,it<i>must</i>be*synchronizedexternally.(Astructuralmodificationisanyoperation*thataddsordeletesoneormoremappings;merelychangingthevalue*associatedwithakeythataninstancealreadycontainsisnota*structuralmodification.)Thisistypicallyaccomplishedby*synchronizingonsomeobjectthatnaturallyencapsulatesthemap.两位兄弟atleastoneofthethreadsmodifiesthemapstructurally,itmustbesynchronizedexternally.至少一个线程结构上修改了MAP,必须从外部同步。