Thread-Per-Message 与 Worker Thread 模式
并发编程领域的问题总结为三个核心问题:分工、同步和互斥。
Thread-Per-Message模式旨在解决“分工”的问题,该模式为每个任务分配一个独立的线程。
在java中,为每个任务创建、销毁线程的成本很高,所以Thread-Per-Message 模式在java世界并不流行。
进而出现了Worker Thread 模式,Worker Thread 模式好比车间里的工人,有活儿了,大家一起干,没活了就聊聊天等着,车间里的工人数量往往是确定的,Worker Thread的数量亦是如此。
Java 提供的线程池 便是Worker Thread 模式的体现。线程池能够避免重复创建、销毁线程,同时能够控制创建线程的上限;然而线程池的使用,也要注意无限制创建线程和接收任务导致的OOM问题。
正确创建线程池
- 使用有界队列来接收任务
- 创建线程池时,指明拒绝策略
- 给线程赋予业务相关的名字
- 不同的业务创建不同的线程池
- 提交到同一线程池的任务一定要相互独立,避免依赖关系