多线程开发小结

基于netty作了一个直播消息转发的服务: 就是把用户的评论, 送礼等信息, 推送到全部进入直播间的客户端上, 同时这些消息须要持久化存储, 这些持久化动做显然不适合放在Listner里处理, 否则会影响消息吞吐量, 那么起新线程就是最直观的方案,因而引起了一些多线程开发的选择和思考,不必定对, 先记录下来:安全

  1. 能避免多线程的,就避免多线程:Executors.newSingleThreadExecutor()是个好工具,若是JAVA有协程就更好了
  2. 使用SingleThreadExecutor,有时就不用本身维护数据队列了,由于线程被天然排队,按顺序执行。固然,想收集一批数据,再作批量处理是不行的。
  3. 上面提到的批处理,能够用Executors.newScheduledThreadPool(n)来定时执行,这样就得本身维护一个数据队列,这个队列必定要线程安全,此时ConcurrentHashMap是个好选择。
  4. 在定时触发的线程里,也应当限制处理数据的数量,以避免撑爆内存,或者给其余系统太大压力。
相关文章
相关标签/搜索