高并发下存在的问题和解决办法

一、消息队列 Resque http://avnpc.com/pages/run-background-task-by-php-resque

二、程序员眼里的高并发 http://www.jiagoushuo.com/article/1000100.html

三、在 Redis 上实现的分布式锁 http://blog.jobbole.com/95148/

四、架构说 - 让架构更简单 http://www.jiagoushuo.com/

五、架构小站 http://sanpi.li/

六、网购秒杀系统架构设计 http://www.lxway.com/1590108.html

转载于:https://my.oschina.net/tomener/blog/657012

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ConcurrentHashMap 是 Java 中用于支持高并发操作的线程安全的哈希表实现。然而,在高并发环境下,仍然存在一些问题需要注意。 1. 首先,虽然 ConcurrentHashMap 是线程安全的,但并不意味着所有操作都是原子性的。例如,putIfAbsent() 方法是原子性的,但是其他操作(如 get、put、remove)可能需要对同一个桶进行多次读取或写入,这可能会导致竞争条件和数据不一致性。 2. 其次,当多个线程同时对 ConcurrentHashMap 进行修改时,可能会出现数据不一致的情况。因为 ConcurrentHashMap 内部使用了分段锁(Segment),每个 Segment 维护了一个独立的哈希表,不同的线程可以同时对不同的 Segment 进行修改,从而提高并发性能。但是,如果多个线程同时对同一个 Segment 进行修改,仍然需要通过锁来保证线程安全。 3. 另外,ConcurrentHashMap 的迭代器并不是强一致的。在迭代过程中,如果有其他线程同时对 ConcurrentHashMap 进行修改,可能会导致迭代结果不准确或抛出异常。为了解决这个问题,可以使用 ConcurrentHashMap 的 keySet()、values() 或 entrySet() 方法返回的视图进行安全的迭代操作。 为了更好地处理高并发下的问题,可以采取以下措施: 1. 尽量减少对同一个桶的并发修改,避免竞争条件和数据不一致性的问题。 2. 使用适当的并发级别(concurrencyLevel)初始化 ConcurrentHashMap,以平衡并发性能和内存开销。 3. 在迭代操作时,使用 ConcurrentHashMap 提供的安全视图进行操作,例如 keySet()、values() 或 entrySet() 返回的集合。 4. 如果需要更高的并发性能,可以考虑使用其他并发容器,如 ConcurrentSkipListMap 或 ConcurrentHashMap 的非阻塞版本 LongAdder。 总之,虽然 ConcurrentHashMap 是线程安全的并发容器,但在高并发环境下仍然需要注意竞争条件、数据不一致性和迭代安全等问题。合理使用并发容器,并采取相应的措施,可以提高系统的并发性能和数据一致性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值