线程中的start()方法
在java线程的启动为什么是start方法?我的意思是说,程序中写的明明是run方法,那start方法就仅仅是调用了run方法?
------解决方案--------------------Thread类中run()和start()方法的区别如下:
run()方法:在本线程内调用该Runnable对象的run()方法,可以重复多次调用;
start()方法:启动一个线程,调用该Runnable对象的run()方法,不能多次启动一个线程;
1) start:
用start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码。通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到spu时间片,就开始执行run()方法,这里方法run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程随即终止。
2) run:
run()方法只是类的一个普通方法而已,如果直接调用Run方法,程序中依然只有主线程这一个线程,其程序执行路径还是只有一条,还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码,这样就没有达到写线程的目的。
------解决方案--------------------简单的说,run方法是用来执行需要现场运行的业务逻辑,start方法是告知JVM在其空间中新建一个线程资源,并运行这个线程。
------解决方案--------------------1楼够详细了。
------解决方案--------------------
因为new的时候是这样:Thread t = new Thread(new YouRunnable());
Thread已经有了。
start()就是告诉jvm,声明开启一个线程。
线程的run()方法是线程自动调用的。如果是代码中直接调用run()。那么跟普通的方法一样的效果。
------解决方案--------------------public class ThreadStudy extends Thread{
public void run(){
System.out.println("hello world");
}
public static void main(String[] args) {
Thread t = new ThreadStudy();
t.start(); // 开启线程,会有两个线程。而如果换成t.run();那么只有一个线程。
System.out.println("first or last");
try {
Thread.sleep(100);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}
}