线程一定要经过 新建(new)、就绪(Runnable)、执行(Running)、阻塞(Bolcked)、死亡
1、在执行start()方法后,表示线程可以运行,至于什么时候运行取决于JVM李的线程调度器的调度
2、调用start方法来启动线程,系系统会把改run方法当成线程执行体来处理,如果直接调用线程对象的run方法
则run方法会立即被执行,而且run方法返回之前其他线程无法并发执行--也就是说系统把线程对象当成一个普通
对象看到,而run方法也是一个普通方法,就不是线程的执行体[code=java]public class InvokeRun extends Thread
{
private int i ;
//重写run方法,run方法的方法体就是线程执行体
public void run()
{
for ( ; i < 100 ; i++ )
{
//直接调用run方法时,Thread的this.getName返回的是该对象名字,
//而不是当前线程的名字。
//使用Thread.currentThread().getName()总是获取当前线程名字
System.out.println(Thread.currentThread().getName() + " " + i);
}
}
public static void main(String[] args)
{
for (int i = 0; i < 100; i++)
{
//调用Thread的currentThread方法获取当前线程
System.out.println(Thread.currentThread().getName() + " " + i);
if (i == 20)
{
//直接调用线程对象的run方法,
//系统会把线程对象当成普通对象,run方法当成普通方法,
//所以下面两行代码并不会启动2条线程,而是依次执行2个run方法
new InvokeRun().run();
new InvokeRun().run();
}
}
}
}[/code] |