一、线程分为用户线程(ULT)和内核线程(KLT)
JVM使用的是KLT模型。
二、线程是稀缺资源,它的创建和销毁是一个相对偏重且耗资源的操作,而java线程依赖于内核线程,创建线程需要进行操作系统状态切换,为避免资源过度消耗需要设法重用线程执行多个任务,线程池就是一个线程缓存,负责对线程进行一个统一分配、调优和分配。
什么时候使用线程池?
单个任务处理时间比较短;
需要处理的任务数量比较大。
线程池的五种状态:
Running:能接受新任务以及处理已添加的的任务
Shutdown:不接受新任务,可以处理已添加的任务
Stop:不接受新任务,不处理已添加的任务,并且中断正在处理的任务
Tidying:所有任务已经终止,ctl记录的“任务数量”为0,ctl负责记录线程池的运行状态与活动线程数量。
Terminated:线程池彻底终止,则线程池转变为terminated状态。