基於netty作了一個直播消息轉發的服務: 就是把用戶的評論, 送禮等信息, 推送到全部進入直播間的客戶端上, 同時這些消息須要持久化存儲, 這些持久化動做顯然不適合放在Listner裏處理, 否則會影響消息吞吐量, 那麼起新線程就是最直觀的方案,因而引起了一些多線程開發的選擇和思考,不必定對, 先記錄下來:安全
- 能避免多線程的,就避免多線程:Executors.newSingleThreadExecutor()是個好工具,若是JAVA有協程就更好了
- 使用SingleThreadExecutor,有時就不用本身維護數據隊列了,由於線程被天然排隊,按順序執行。固然,想收集一批數據,再作批量處理是不行的。
- 上面提到的批處理,能夠用Executors.newScheduledThreadPool(n)來定時執行,這樣就得本身維護一個數據隊列,這個隊列必定要線程安全,此時ConcurrentHashMap是個好選擇。
- 在定時觸發的線程裏,也應當限制處理數據的數量,以避免撐爆內存,或者給其餘系統太大壓力。