每个线程都在单独的调用堆栈中启动。从主线程调用run()方法, run()方法转到当前调用堆栈, 而不是新调用堆栈的开头。 |
class TestCallRun1 extends Thread{
public void run(){
System.out.println("running...");
}
public static void main(String args[]){
TestCallRun1 t1=new TestCallRun1();
t1.run();//fine, but does not start a separate call stack
}
}
立即测试
Output:running...
如果你直接调用run()方法会出现问题
class TestCallRun2 extends Thread{
public void run(){
for(int i=1;i<5;i++){
try{Thread.sleep(500);}catch(InterruptedException e){System.out.println(e);}
System.out.println(i);
}
}
public static void main(String args[]){
TestCallRun2 t1=new TestCallRun2();
TestCallRun2 t2=new TestCallRun2();
t1.run();
t2.run();
}
}
立即测试
Output:1
2
3
4
5
1
2
3
4
5
如你在上面的程序中看到的, 没有上下文切换, 因为在这里t1和t2将被视为普通对象而不是线程对象。 |
评论前必须登录!
注册