1)读写锁而不能用chm的例子(读多,且要保证一个业务操作的原子性)
现在突然明白了这2个的场景,因为chm其实只保证对单个操作的原子性,同时保证了并发安全,
但如果一个业务由几个操作组成,那么就不是原子的了。
因此如果涉及到多个线程操作同一个资源,如:网络连接的管理,那么使用chm是不合适的,如果同一个uid的玩家发起多次连接,由于在netty中是连接到不同的worker线程的。
很可能在临界状态下,如果客户端发起多次网络连接,很可能互踢出问题。
这时,就可以用读写锁代替chm。
思考下:ChannelService.java中在哪个线程移除Channel的管理?是worker线程,还是在hash映射后的业务线程呢?
2)用chm的例子(写多)
由于普通的hashmap不可以在多个线程中同时出现读写,不然就会异常,如果对同一个对象的hash始终在同一个线程中,那么对这个对象的 添加,删除操作就可以在chm中进行,比如:统计一个handler的执行时间,超时了就打印出来这么一个需求。