日期:2014-05-20  浏览次数:20748 次

线程中的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楼够详细了。
------解决方案--------------------
引用:
Runnable是一个接口,实现接口时应该实现接口内的所有方法。但是在写程序的时候并没有实验start方法。谁能讲讲start方法呢?


因为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();
}
}
}