线程池的原理:java
因为我们新版jdk中java线程和操做系统线程是一对一的,因此启动线程是经过jvm调用操做系统接口来建立线程的(Thread.start(start0()是个native方法))jvm
而后start0方法启动的操做系统线程如何调用Thread的run方法呢?没错就是经过jvm来调用的java中Thread的run方法的操作系统
那么线程池的原理就是经过一个计数器和work队列来维护线程池的大小线程
每建立一个Thread(经过Work来包装的从queue队列中取出来的Runnable实现),则以CAS的方式增长计数器,并将新增的work放入work队列blog
在Work的执行过程当中,异常退出,则计数器-1,而且从新生成一个work来继续处理接口