启动线程是用run()方法还是start()方法?一样吗?

lliiqiang 2010-12-06 02:16:10
下面代码的运行结果是什么?

public test extends Thread{

public void run(){
System.out.println(Thread.currentThread()==this);
}

public static void main(String[] args){
test the=new test();
the.run();
the.start();
}

}
...全文
3214 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
printf_2012 2010-12-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 yang362578649 的回复:]
start()方法是启动(即开辟)一个线程的方法,因此线程的启动必须通过此方法,
而run()方法,只是Thread类的一个方法,它本身并不能开辟线程。
所以,当你用run()时候,程序只有一个线程,根本没达到你多线程的目的(是错误的)。而你用start()时候,你的程序又开辟了两个线程,所以结果不同
[/Quote]
++1
Lena-Yang 2010-12-07
  • 打赏
  • 举报
回复
启动一个线程用start()方法;然后系统会自动执行它的run()。
qkniit 2010-12-07
  • 打赏
  • 举报
回复
启动一个线程用start()方法;然后系统会自动执行它的run()。
plusplus2010 2010-12-07
  • 打赏
  • 举报
回复
启动当然是用start()。方法run()是由系统调用的。
njpingwen 2010-12-07
  • 打赏
  • 举报
回复
不一样,启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。
tang871015 2010-12-07
  • 打赏
  • 举报
回复
启动一个线程用start()方法;然后系统会自动执行它的run()。
zwh5067177 2010-12-07
  • 打赏
  • 举报
回复
毫无疑问,肯定是start方法啊.
Seeblossom 2010-12-07
  • 打赏
  • 举报
回复
启动线程肯定是用start()方法,这样就开始了一个新的线程,并进入就绪状态,当cpu给它分配时间片并且其它资源已经就绪的情况下那么它就可以运行了。
mopishv0 2010-12-06
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 boyone2009 的回复:]

之所以出现线程,就是为了更好的利用CPU,让她更加“精明”的干活。

通过调用Thread类的start()方法来启动一个线程,
这时此线程是处于就绪状态,
并没有运行。
然后通过此Thread类调用方法run()来完成其运行操作的,
这里方法run()称为线程体,
它包含了要执行的这个线程的内容,
Run方法运行结束,
此线程终止,
而CPU再运行其它线程,

而如果直……
[/Quote]
当然如果线程过多也会降低效率 而且线程安全问题也需要注意
superdcj 2010-12-06
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 boyone2009 的回复:]
之所以出现线程,就是为了更好的利用CPU,让她更加“精明”的干活。

通过调用Thread类的start()方法来启动一个线程,
这时此线程是处于就绪状态,
并没有运行。
然后通过此Thread类调用方法run()来完成其运行操作的,
这里方法run()称为线程体,
它包含了要执行的这个线程的内容,
Run方法运行结束,
此线程终止,
而CPU再运行其它线程,

而如果直接……
[/Quote]+1
无伤 2010-12-06
  • 打赏
  • 举报
回复
之所以出现线程,就是为了更好的利用CPU,让她更加“精明”的干活。

通过调用Thread类的start()方法来启动一个线程,
这时此线程是处于就绪状态,
并没有运行。
然后通过此Thread类调用方法run()来完成其运行操作的,
这里方法run()称为线程体,
它包含了要执行的这个线程的内容,
Run方法运行结束,
此线程终止,
而CPU再运行其它线程,

而如果直接用Run方法,
这只是调用一个方法而已,
程序中依然只有主线程--这一个线程,
其程序执行路径还是只有一条,
这样就没有达到写线程的目的。

记住:线程就是为了更好地利用CPU,
提高程序运行速率的!
lenooooo 2010-12-06
  • 打赏
  • 举报
回复
当然不一样了 调用run只是调用普通的方法相当于
DearFen 2010-12-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 yang362578649 的回复:]

start()方法是启动(即开辟)一个线程的方法,因此线程的启动必须通过此方法,
而run()方法,只是Thread类的一个方法,它本身并不能开辟线程。
所以,当你用run()时候,程序只有一个线程,根本没达到你多线程的目的(是错误的)。而你用start()时候,你的程序又开辟了两个线程,所以结果不同
[/Quote]

up
买本 SCJP 看看,这本书看完,能明白一些有关线程的问题,顺便你还能考个证回来
zn85600301 2010-12-06
  • 打赏
  • 举报
回复
你应该去看下线程的基本知识
ztenv 2010-12-06
  • 打赏
  • 举报
回复
当然是start()了;如果你用run,就会阻住你的当前线程;
taoshengyijiuwu 2010-12-06
  • 打赏
  • 举报
回复
不一样
yang362578649 2010-12-06
  • 打赏
  • 举报
回复
start()方法是启动(即开辟)一个线程的方法,因此线程的启动必须通过此方法,
而run()方法,只是Thread类的一个方法,它本身并不能开辟线程。
所以,当你用run()时候,程序只有一个线程,根本没达到你多线程的目的(是错误的)。而你用start()时候,你的程序又开辟了两个线程,所以结果不同



67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧