new Thread的优缺点
优点:
通过new Thread()创建线程的API简单易用,结构清晰,对于执行单一的一次性任务十分便利。
缺点:
每次new Thread都新建对象,性能差;
没有线程管理者,可能会无限制新建线程,不仅会消耗系统资源,还会降低系统的稳定性,例如占用过多的系统资源导致OOM;
缺乏更多功能,比如定时、定期、并发数控制等功能。
线程池的优点
合理利用线程池能够带来三个好处:
降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。
提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。
提高线程的可管理性。线程是稀缺资源,使用线程池可以进行统一的分配、调优和监控。
一、什么是线程池
线程池其实是一种池化的技术的实现,池化技术的核心思想其实就是实现资源的一个复用,避免资源的重复创建和销毁带来的性能开销。在线程池中,线程池可以管理一堆线程,让线程执行完任务之后不会进行销毁,而是继续去处理其它线程已经提交的任务。
工作线程什么时候被回收
工作线程被回收也是从java.util.concurrent.ThreadPoolExecutor#runWorker源码中得出的。我们可以看到,当task为空,或者从getTask()方法获取的task为空,则执行processWorkerExit()方法移除工作队列
二、线程池的原理
通俗的讲,线程池就是一个线程集合,里面已经提前创建好了若干个线程,当需要线程的时候到线程集合里获取一个即可,这样省去了创建线程的时间,当然也省去了GC回收线程的时间,当线程池里的线程都被使用了后,只能阻塞等待了,等待获取线程池后被释放的线程,这样就不会无限制的去创建线程二导致Out of Memory。