Thread通过new来新建一个线程,这个过程是是初始化一些线程信息,如线程名,id,线程所属group等,可以认为只是个普通的对象。调用Thread的start()后Java虚拟机会为其创建方法调用栈和程序计数器,同时将hasBeenStarted为true,之后调用start方法就会有异常。
处于这个状态中的线程并没有开始运行,只是表示该线程可以运行了。至于该线程何时开始运行,取决于JVM里线程调度器的调度。当线程获取cpu后,run()方法会被调用。不要自己去调用Thread的run()方法。之后根据CPU的调度在就绪——运行——阻塞间切换,直到run()方法结束或其他方式停止线程,进入dead状态。
源码解析
Java中线程池主要是并发包java.util.concurrent 中 ThreadPoolExecutor这个类实现的。
线程池框架Executor
java中的线程池是通过Executor框架实现的,Executor 框架包括类
Executor
Executors
ExecutorService
ThreadPoolExecutor
Callable
Future
FutureTask
(1) Executor: 所有线程池的接口,只有一个方法。
public interface Executor {
void execute(Runnable command);
}