202108100722 - 为什么使用线程池

202108100722 - 为什么使用线程池

每个任务创建一个线程有什么问题?

线程的创建和销毁对系统开销(时间、内存)太大,任务越多,开销越大

过多的线程导致更多的上下文切换,影响系统的稳定性。

线程池如何解决上述问题?

线程池创建一些线程,一直处于工作状态

根据需要创建线程,限制线程的数量

使用线程池的好处

第一点,线程池可以解决线程生命周期的系统开销问题,同时还可以加快响应速度。因为线程池中的线程是可以复用的,我们只用少量的线程去执行大量的任务,这就大大减小了线程生命周期的开销。而且线程通常不是等接到任务后再临时创建,而是已经创建好时刻准备执行任务,这样就消除了线程创建所带来的延迟,提升了响应速度,增强了用户体验。

第二点,线程池可以统筹内存和 CPU 的使用,避免资源使用不当。线程池会根据配置和任务数量灵活地控制线程数量,不够的时候就创建,太多的时候就回收,避免线程过多导致内存溢出,或线程太少导致 CPU 资源浪费,达到了一个完美的平衡。

第三点,线程池可以统一管理资源。比如线程池可以统一管理任务队列和线程,可以统一开始或结束任务,比单个线程逐一处理任务要更方便、更易于管理,同时也有利于数据统计,比如我们可以很方便地统计出已经执行过的任务的数量。

使用线程池调用执行任务后,不会自动退出?

public static void main(String[] args) {

// AtomicInteger a = new AtomicInteger();

ExecutorService service = Executors.newFixedThreadPool(5);

for (int i = 0; i < 10000; i++) {

service.execute(new Task());

System.out.println(i);

}

System.out.println(Thread.currentThread().getName());

}

相关推荐

传奇世界哪个私服人最多?真实人气挑选指南
365bet官网注册

传奇世界哪个私服人最多?真实人气挑选指南

📅 10-05 👁️ 2980
程序员是做什么的(非常详细),零基础入门到精通,看这一篇就够了
買房子怎麼找?「看房網站」推薦哪些?分享2種有效率的找房秘訣