多线程高并发学习笔记(1)http://www.cnblogs.com/samqiu/p/4279836.html

本文介绍了Java中几种常用的线程安全的数据结构及其实现原理,包括AtomicInteger、ConcurrentHashMap、CopyOnWriteArrayList和BlockingQueue等,并对比了它们与非线程安全版本的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、AtomicInteger 是线程安全的,而i++这种是线程不安全的,在多线程高并发的时候用AtomicInteger ,AtomicDouble同理。

2、ConcurrentHashMap是线程安全的,而HashMap是线程不安全的,HashTable是线程安全的,ConcurrentHashMap结合两种的优点,把HashMap分成16个(默认)segment,每个segment是独立的,修改一个segment不会影响其他segment,从而达到了线程安全,当然如果有多个线程去修改一个segment,那就会阻塞。参考http://blog.youkuaiyun.com/imzoer/article/details/8621074

3、Collections.synchronizedMap(),使map变成安全的。其他集合如List,Set等也有相关的方法。

4、CopyOnWriteArrayList 实现原理是在修改时先copy一份,然后修改copy的,如果有其他读线程来读数据,就读原来的,等copy的修改完后再把引用指向新的,即copy的,CopyOnWriteArrayList 适合在读多写(增、删、改)少的情况下。参考:http://www.cnblogs.com/dolphin0520/p/3938914.html

5、BlockingQueue(参考http://www.cnblogs.com/samqiu/p/4279836.html

 a、ArrayBlockingQueue 初始化时一定要指定个数,否则不能初始化,用在处理并发量特别大的时候,相当于限流的作用,如12306春运放票的时间点。

 b、LinkedBlockingQueue 初始化不一定要指定队链个数,用于处理并发量较高,如用于12306接近春运非放票时间点。

 c、SynchronousQueue 无缓冲队链,来一个处理一个,如用在12306平时的放票中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值