Java面试题-并发框架
1. SynchronizedMap和ConcurrentHashMap有什么区别?
答:java5中新增了ConcurrentMap接口和它的一个实现类ConcurrentHashMap。ConcurrentHashMap提供了和Hashtable以及SynchronizedMap中所不同的锁机制。比起synchronizedMap来,它提供了好得多的并发性。多个读操作几乎总可以并发地执行,同时进行的读和写操作通常也能并发地执行,而同时进行的写操作仍然可以不时地并发进行(相关的类也提供了类似的多个读线程的并发性,但是,只允许有一个活动的写线程)。Hashtable中采用的锁机制是一次锁住整个hash表,从而同一时刻只能由一个线程对其进行操作;而ConcurrentHashMap中则是一次锁住一个桶。ConcurrentHashMap默认将hash表分为16个桶,诸如get,put,remove等常用操作只锁当前需要用到的桶。这样,原来只能一个线程进入,现在却能同时有16个写线程执行,并发性能的提升是显而易见的。前面说到的16个线程指的是写线程,而读操作大部分时候都不需要用到锁。只有在size等操作时才需要锁住整个hash表。 在迭代方面,ConcurrentHashMap使用了一种不同的迭代方式。在这种迭代方式中,当iterator被创建后集合再发生改变就不再是抛出ConcurrentModificationException,取而代之的是在改变时new新的数据从而不影响原有的数据 ,iterator完成后再将头指针替换为新的数据 ,这样iterator线程可以使用原来老的数据,而写线程也可以并发的完成改变。
2. CopyOnWriteArrayList可以用于什么应用场景?
答:CopyOnWriteArrayList(免锁容器)的好处之一是当多个迭代器同时遍历和修改这个列表时,不会抛出ConcurrentModificationException。在CopyOnWriteArrayList中,写入将导致创建整个底层数组的副本,而源数组将保留在原地,使得复制的数组在被修改时,读取操作可以安全地执行。
最新文章
- GOLANG 基本数据类型 浮点型
- [issue] [iOS 10] 升级后无法真机测试 Could not find Developer Disk Image
- 安卓使用adb命令安装软件
- github生成燃尽图
- 为什么使用开源软件(Open Source Software)
- input autocomplete 下拉提示+支持中文
- 内存错误:CRT detected that the application wrote to memory after end of heap buffer
- POJ 1979 DFS
- Linux查看文件大小
- Win10 禁止自动更新以及禁止Windows 10升级助手(Windows 10 易升)
- [NOIP2014D2]
- 【PHP】最详细PHP从入门到精通(一)——想学习PHP的朋友们福利来了!
- (转载)深度学习的weight initialization
- python开发之虚拟环境管理:virtualenv、virtualenvwrapper、pycharm
- Postfix 邮件服务 - PostfixAdmin
- Filter功能
- Docker MySQL5.5镜像
- 【收集资料】OpenGL学习
- main.jsbundle 脱离掉本地服务
- java正则表达式去除html中所有的标签和特殊HTML字符(以&;开头的)