HashMap不是线程安全的,往往在写程序时需要通过一些方法来回避.其实JDK原生的提供了2种方法让HashMap支持线程安全.
方法一:通过Collections.synchronizedMap()返回一个新的Map,这个新的map就是线程安全的. 这个要求大家习惯基于接口编程,因为返回的并不是HashMap,而是一个Map的实现.
方法二:重新改写了HashMap,具体的可以查看java.util.concurrent.ConcurrentHashMap. 这个方法比方法一有了很大的改进.
下面对这2中实现方法从各个角度进行分析和比较.
实现原理
锁机制的不同
如何得到/释放锁
优缺点
1)实现原理
方法一原理:
通过Collections.synchronizedMap()来封装所有不安全的HashMap的方法,就连toString, hashCode都进行了封装. 封装的关键点有2处,1)使用了经典的synchronized来进行互斥, 2)使用了代理模式new了一个新的类,这个类同样实现了Map接口.
HashMap
分类:
编程语言 时间:
2018-09-13 18:37:48
阅读次数:
210
背景: showModalDialog 是比较老的方法了,有些浏览器不再支持弹出模态窗口了。 比如说谷歌浏览就不再支持了,有文章说明如下: Chrome’s Lack of Support for showModalDialog Breaks Some Enterprise Web Apps 弹出窗 ...
分类:
其他好文 时间:
2018-09-13 18:35:47
阅读次数:
477
[TOC] 概述 LinkedHashMap还是比较简单的, 相对于HashMap, 它是有序的, 那么问题就来了, 它是怎么保持有序的? 它直接继承于HashMap, 重写或增加了一些新的关于保持Map有序的方法, 至于扩容或是数据结构等都于HashMap一样, 下面我们重点分析它是怎么保持有序的 ...
分类:
其他好文 时间:
2018-09-13 18:34:58
阅读次数:
210
点击窗口的 关闭 按钮,弹出messageBox 注:第28行解释:QMessageBox.question(self, 'Message', 'Are you want to quit?', QMessageBox.Yes | QMessageBox.No,QMessageBox.Yes) 显示一 ...
分类:
其他好文 时间:
2018-09-13 18:26:24
阅读次数:
179
1、常见的属性的注入:int,string,list,set,map 2、什么是属性编辑器及作用? (1)将spring配置文件中的字符串转换为相应的java对象 (2)spring内置了一些属性编辑器,也可以自定义属性编辑器 3、如果自定义属性编辑器 (1)继承propertyEditorSupp ...
分类:
编程语言 时间:
2018-09-13 17:25:00
阅读次数:
175
1)whil循环 while 条件: 代码块1(循环体) break #彻底停止本层循环 continue #停止本次循环 执行下一次循环 else:#当条件不成立时执行else 代码块22)格式化输出 %s 占位字符串 %d 占位整数 注: 在字符串串中如果使?用了了%s这样的占位符. 那么所有的 ...
分类:
其他好文 时间:
2018-09-13 15:05:46
阅读次数:
131
先想一下,创建BigDecimal对象的时候一般是怎么创建的? new一个,传进去值 BigDecimal.valueOf方法,传进去值 作为一个数字类型,经常有的操作是比较大小,有一种情况是比较是否相等。用equal方法还是compareTo方法?这里就是一个大坑 用于比较的值全都是0,猜一猜上面 ...
分类:
其他好文 时间:
2018-09-13 14:16:50
阅读次数:
175
遍历读取所有的yml文件的问答,然后写入question和answer文件中 ...
分类:
其他好文 时间:
2018-09-13 14:11:21
阅读次数:
106
【学到的知识点——当有两个判断时,谁在外面谁在里面】1、两个判断 判断一:a和b是否会超出m和n 判断二:nums1[a]大,还是nums2[b]大2、很显然判断一的优先级大于判断二 【反思】1、审题,题目说了nums1有足够的空间 【别人的Java解法代码】 【自己的Java解法代码】 ...
分类:
其他好文 时间:
2018-09-13 12:09:55
阅读次数:
120