HashMap为什么是线程不安全的?
发布时间:2020-12-14 06:37:15 所属栏目:Java 来源:网络整理
导读:p style="color:rgb(51,51,51);font-family:Arial;font-size:14px;"一直以来只是知道HashMap是线程不安全的,但是到底HashMap为什么线程不安全,多线程并发的时候在什么情况下可能出现问题? p style="color:rgb(51,51);font-family:Arial;font-size:14px;"H
<p style="color:rgb(51,51,51);font-family:Arial;font-size:14px;">一直以来只是知道HashMap是线程不安全的,但是到底HashMap为什么线程不安全,多线程并发的时候在什么情况下可能出现问题? <p style="color:rgb(51,51);font-family:Arial;font-size:14px;">HashMap底层是一个Entry数组,当发生hash冲突的时候,hashmap是采用链表的方式来解决的,在对应的数组位置存放链表的头结点。对链表而言,新加入的节点会从头结点加入。 <p style="color:rgb(51,51);font-family:Arial;font-size:14px;">javadoc中关于hashmap的一段描述如下: <p style="color:rgb(51,51);font-family:Arial;font-size:14px;"> <p style="color:rgb(51,51);font-size:14px;font-family:Simsun;">此实现不是同步的。如果多个线程同时访问一个哈希映射,而其中至少一个线程从结构上修改了该映射,则它必须?保持外部同步。(结构上的修改是指添加或删除一个或多个映射关系的任何操作;仅改变与实例已经包含的键关联的值不是结构上的修改。)这一般通过对自然封装该映射的对象进行同步操作来完成。如果不存在这样的对象,则应该使用?<a href="http://www.ostools.net/uploads/apidocs/jdk-zh/java/util/Collections.html#synchronizedMap(java.util.Map)" rel="nofollow" style="color:rgb(51,102,153);text-decoration:none;"> Collections.synchronizedMap ?方法来“包装”该映射。最好在创建时完成这一操作,以防止对映射进行意外的非同步访问,如下所示:<pre style="color:rgb(51,51);font-size:14px;"> Map m = Collections.synchronizedMap(new HashMap(...)); <br style="color:rgb(51,51);font-family:Arial;font-size:14px;"><p style="color:rgb(51,51);font-family:Arial;font-size:14px;"> <p style="color:rgb(51,51);font-family:Arial;font-size:14px;">1、 <p style="color:rgb(51,51);font-family:Arial;font-size:14px;"> <div class="dp-highlighter bg_java" style="font-family:Consolas,'Courier New',Courier,mono,serif;color:rgb(51,51);"> <div class="bar"> <div class="tools" style="font-size:9px;line-height:normal;font-family:Verdana,Geneva,Arial,Helvetica,sans-serif;color:#C0C0C0;border-left-width:3px;border-left-style:solid;border-left-color:rgb(108,226,108);"> [java]?<a href="http://blog.csdn.net/mydreamongo/article/details/8960667#" rel="nofollow" class="ViewSource" title="view plain" style="color:rgb(160,160,160);text-decoration:none;border:none;display:inline-block;width:16px;text-indent:-2000px;">view plain?<a href="http://blog.csdn.net/mydreamongo/article/details/8960667#" rel="nofollow" class="CopyToClipboard" title="copy" style="color:rgb(160,160);text-decoration:none;border:none;display:inline-block;width:16px;text-indent:-2000px;">copy <div style="width:18px;z-index:99;">
?removeEntryForKey(Object?key)?{??
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |