每个线程都在单独的调用堆栈中启动。从主线程调用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();
}
}
【如果我们直接调用run()方法而不是start()方法怎么办()】立即测试
Output:1
2
3
4
5
1
2
3
4
5
如你在上面的程序中看到的, 没有上下文切换, 因为在这里t1和t2将被视为普通对象而不是线程对象。 |
推荐阅读
- Java断言介绍和用法
- 如何通过多个线程执行单个任务()
- Java中的线程组
- Java中的线程调度程序
- Java中的线程同步块
- Java中的线程同步
- Java线程静态同步示例
- Java线程和关闭钩子
- 小程序安卓渲染问题