闲来无事,研究了下多线程,写了个多线程推送消息的demo。
码上代码之前,我们必须先了解一点多线程的场景知识。
为什么要使用多线程?
提高程序效率。假设要向上万甚至十万百万名用户发送消息,单线程推送效率就有些相形见拙了,此时为了提高推送效率,采用多线程是不可避免的,可以很大程度上减少推送时间。
创建线程的方式?
创建线程池的方式有ThreadPoolExecutor和Executors,而Executors利用工厂模式向我们提供了4种线程池实现方式,这里不做过多解释。
在阿里发布的 Java开发手册中强制线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。
我应该创建多少线程?
因为每创建一个线程需要耗费大量CPU资源,所以应根据CPU的性能来决定使用多少线程。
接下来码上代码
这里使用了创建了线程池ThreadPoolExecutor poolExecutor去执行消息的推送
/**
* 多线程推送消息处理
* @param msg
* @param successList
* @param failList
* @param countDownLatch
*/
private static void poolSend(String msg, LinkedList<String> successList, LinkedList<String> failList,Co