黑马程序员技术交流社区
标题:
多线程——用run和start有什么具体的区别呢?
[打印本页]
作者:
joure
时间:
2013-11-17 16:00
标题:
多线程——用run和start有什么具体的区别呢?
本帖最后由 joure 于 2013-11-18 10:55 编辑
创建新执行线程有两种方法。一种方法是将类声明为 Thread 的子类。该子类应重写 Thread 类的 run 方法。接下来可以分配并启动该子类的实例。例如,计算大于某一规定值的质数的线程可以写成:
--------------------------------------------------------------------------------
class PrimeThread extends Thread {http://edu.csdn.net/subject/net/index.shtml?vm1
long minPrime;
PrimeThread(long minPrime) {
this.minPrime = minPrime;
}
public void run() {
// compute primes larger than minPrime
. . .
} }
--------------------------------------------------------------------------------
然后,下列代码会创建并启动一个线程:
PrimeThread p = new PrimeThread(143);
p.start();
上面是API中的帮助说明,调用run和start有什么具体的区别呢? 我的理解是 通过start开辟一个线程,通过run来执行和终结线程。
我想知道start和run的运行过程是怎样的呢?
他们各自可以单独调用吗?run可以开辟线程吗?
作者:
zy888802
时间:
2013-11-17 16:07
run只是运行run方法里面的代码
start则,启动了线程并运行了代码
作者:
zdrain
时间:
2013-11-17 16:08
你可以这样理解:
new一个线程对象代表开启了一个线程,效用线程start方法开启线程使之进入临时状态
run方法只是线程内容的一个容器(可以这么理解),调用start方法时虚拟机直接访问run方法的内容并开启线程
run方法不是开辟线程,他只是一个普通方法,呵呵
作者:
张佳鹏
时间:
2013-11-17 16:34
实类话 一个线程对象后 Thread t=new Thread();
调用t.start();后才会开启线程 执行run()方法里面的内容
作者:
张佳鹏
时间:
2013-11-17 16:36
t.start()有两个作用1开启线程 2执行run方法里面的内容
作者:
张佳鹏
时间:
2013-11-17 16:38
如果直接调用run()方法也是可以的 但是作用效果是主线程在执行run()方法的内容 不会有多线程
作者:
hubby
时间:
2013-11-17 17:17
创建线程步骤
1:定义类继承Thread,
2,复写Thread类中的run方法
3,调用线程的start方法,启动线程,调用了run方法。
run和start都是Thread中的方法。
作者:
wangyuyus
时间:
2013-11-17 17:43
调用run方法只会调用继承Thread的类的run方法,线程不会启动
调用start方法启动线程并运行继承Thread的类的run方法
作者:
陈文杰
时间:
2013-11-17 18:28
1) start:
用 start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码。通过调用Thread类的 start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到cpu时间片,就开始执行run()方法,这里方法 run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程随即终止。
2) run:
run()方法只是类的一个普通方法而已,如果直接调用Run方法,程序中依然只有主线程这一个线程,其程序执行路径还是只有一条,还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码,这样就没有达到写线程的目的。
总结:调用start方法方可启动线程,而run方法只是thread的一个普通方法调用,还是在主线程里执行。
例如:
DownloadThread downloadThread = new DownloadThread(mp3Info);
//启动新线程
Thread thread = new Thread(downloadThread);
thread.start();
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2