为什么concurrenthashmap是线程安全的
jdk1.7中,concurrenthashmap使用的锁分段技术,将数据分成一段一段的存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一个段数据的时候,其他段的数据也能被其他线程访问。
那说说jdk1.7中segment的原理
刚刚说的一段一段就是指segment,它继承了reentrantlock,具备锁和释放锁的功能。concurrenthashmap只有16个segment,并且不会扩容,最多可以支持16个线程并发写。
jdk1.8的concurrenthashmap怎么实现线程安全的
jdk1.8放弃了锁分段的做法,采用cas和synchronized方式处理并发。以put操作为例,cas方式确定key的数组下标,synchronized保证链表节点的同步效果。
为什么不推荐使用hashtable呢
hashtable容器使用synchronized来保证线程安全,但在线程竞争激烈的情况下hashtable的效率非常低下。因为多个线程访问hashtable的同步方法时,可能会进入阻塞或轮询状态。如线程1使用put进行添加元素,线程2不但不能使用put方法添加元素,并且也不能使用get方法来获取元素,所以竞争越激烈效率越低。
如对本文有疑问, 点击进行留言回复!!
springmvc之ResponseBody响应json数据遇到的错误及解决
uni-app 后台升级 静默升级 uniapp 后台更新 静默更新 在线升级
SpringBoot多Module启动报错Could not transfer metadata
Hibernate项目报错:Cannot call sendError() after the response has been committed
网友评论