并发——线程池优于new Thread

时间:2023-11-15来源:浏览:

new Thread的优缺点

优点:

    通过new Thread()创建线程的API简单易用,结构清晰,对于执行单一的一次性任务十分便利。


缺点:

 每次new Thread都新建对象,性能差;

 没有线程管理者,可能会无限制新建线程,不仅会消耗系统资源,还会降低系统的稳定性,例如占用过多的系统资源导致OOM;

缺乏更多功能,比如定时、定期、并发数控制等功能。


线程池的优点

   合理利用线程池能够带来三个好处:


降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。

提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。

提高线程的可管理性。线程是稀缺资源,使用线程池可以进行统一的分配、调优和监控。


一、什么是线程池

线程池其实是一种池化的技术的实现,池化技术的核心思想其实就是实现资源的一个复用,避免资源的重复创建和销毁带来的性能开销。在线程池中,线程池可以管理一堆线程,让线程执行完任务之后不会进行销毁,而是继续去处理其它线程已经提交的任务。


工作线程什么时候被回收

        工作线程被回收也是从java.util.concurrent.ThreadPoolExecutor#runWorker源码中得出的。我们可以看到,当task为空,或者从getTask()方法获取的task为空,则执行processWorkerExit()方法移除工作队列


二、线程池的原理

通俗的讲,线程池就是一个线程集合,里面已经提前创建好了若干个线程,当需要线程的时候到线程集合里获取一个即可,这样省去了创建线程的时间,当然也省去了GC回收线程的时间,当线程池里的线程都被使用了后,只能阻塞等待了,等待获取线程池后被释放的线程,这样就不会无限制的去创建线程二导致Out of Memory。