Java线程启动为什么要用start()而不是run()?

网友投稿 417 2022-09-10


Java线程启动为什么要用start()而不是run()?

目录1、直接调用线程的run()方法2、调用线程的start()方法3、总结

1、直接调用线程的run()方法

public class TestStart {

public static void main(String[] args) throws InterruptedException {

Thread t1 = new Thread(){

@Override

public void run() {

System.out.println("Thread t1 is working..."+System.currentTimeMillis());

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

};

t1.run();

Thread.sleep(2000);

System.out.println("ThreadvUCgfwrv Main is doing other thing..."+System.currentTimeMillis());

}

}

可以看到主线程在t1.run()运行之后再过三秒才继续运行,也就是说,直接在主方法中调用线程的run()方法,并不会开启一个线程去执行run()方法体内的内容,而是同步执行。

2、调用线程的start()方法

public class TestStart {

public static void main(String[] args) throws InterruptedException {

Thread t1 = new Thread(){

@Override

publicvUCgfwrv void run() {

System.out.println("Thread t1 is working..."+System.currentTimeMillis());

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

};

t1.start();

Thread.sleep(2000);

System.out.println("Thread Main is doing other thing..."+System.currentTimeMillis());

}

}

startVSrun1.JPG 可以看到在,在执行完t1.start()这一行之后,主线程立马继续往下执行,休眠2s后输出内容。 也就是说,t1线程和主线程是异步执行的,主线程在线程t1的start()方法执行完成后继续执行后面的内容,无需等待run()方法体的内容执行完成。

3、总结

1、开启一个线程必须通过start()方法,直接调用run()方法并不会创建线程,而是同步执行run()方法中的内容。

2、如果通过传入一个Runnable对象创建线程,线程会执行Runnable对象的run()方法;否则执行自己本身的run()方法。

3、不管是实现Runnable接口还是继承Thread对象,都可以重写run()方法,达到执行设定的任务的效果。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:实际操作(实际操作倒车入库技巧)
下一篇:Linux常用命令精讲(linux命令笔记)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~