1 生命周期
线程被创建和启动后(调用start()方法后),并不是已启动就进入执行状态,也不是一直处于执行状态。线程状态转换图如下:
1.1 新建和就绪状态
新建状态:当程序new了一个线程对象之后,该线程就处于新建状态。和其他java对象一样,仅仅有JVM为其分配内存,并初始化成员变量的值。
就绪状态:线程对象调用了start()方法后。JVM为其创建方法调用栈和程序计数器。此时,线程并没有开始运行,何时运行则取决于JVM里线程调度器的调度。
注意:启动线程是start()方法,不是run()方法。直接调用run(),系统会把线程对象当成一个普通对象,而run()方法也是一个普通方法,而不是线程执行体。因此,在run()方法返回之前,其他线程无法并发执行。
如下测试代码:
package thread;
/**
* Created by Zen9 on 2016/3/4.
*/
public class Runtest extends Thread{
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println(this.getName() + " " +i);
}
}
public static void main(String[] args) {
//创建两个新线程,并调用run()方法
new Runtest().run();
new Runtest().run();
for (int