2018年8月30日
摘要: 构造一个线程池为什么需要几个参数?如果避免线程池出现OOM?`Runnable`和`Callable`的区别是什么?本文将对这些问题一一解答,同时还将给出使用线程池的常见场景和代码片段。`Executors`为我们提供了构造线程池的便捷方法,对于服务器程序我们应该杜绝使用这些便捷方法,而是直接使用线程池`ThreadPoolExecutor`的构造方法,避免无界队列可能导致的OOM以及线程个数限制不当导致的线程数耗尽等问题。`ExecutorCompletionService`提供了等待所有任务执行结束的有效方式,如果要设置等待的超时时间,则可以通过`CountDownLatch`完成。 阅读全文
posted @ 2018-08-30 08:32 CarpenterLee 阅读(116680) 评论(11) 推荐(50) 编辑