思考: ConcurrentHashMap、读写锁的使用场景

1)读写锁而不能用chm的例子(读多,且要保证一个业务操作的原子性)

现在突然明白了这2个的场景,因为chm其实只保证对单个操作的原子性,同时保证了并发安全,

但如果一个业务由几个操作组成,那么就不是原子的了。

因此如果涉及到多个线程操作同一个资源,如:网络连接的管理,那么使用chm是不合适的,如果同一个uid的玩家发起多次连接,由于在netty中是连接到不同的worker线程的。

很可能在临界状态下,如果客户端发起多次网络连接,很可能互踢出问题。

这时,就可以用读写锁代替chm。

思考下:ChannelService.java中在哪个线程移除Channel的管理?是worker线程,还是在hash映射后的业务线程呢?

2)用chm的例子(写多)

由于普通的hashmap不可以在多个线程中同时出现读写,不然就会异常,如果对同一个对象的hash始终在同一个线程中,那么对这个对象的 添加,删除操作就可以在chm中进行,比如:统计一个handler的执行时间,超时了就打印出来这么一个需求。

上一篇:[Java- 03] JavaAPI CHM阅读


下一篇:记一次频繁YGC导致系统越来越慢问题排查