2 cyand1987 cyand1987 于 2016.03.17 23:13 提问

关于Thread的小问题。

new Thread(){
public void run() {
super.run();
}
}.start();

new Thread(new Runnable() {
public void run() {

}
}).start();

这2种方法有什么区别?为什么用上面这种有问题

2个回答

bealing
bealing   Rxr 2016.03.17 23:22
已采纳

第一种方法Thread的start方法只能调用一次,执行完之后不能再调用否则就会出错,下面的方法则不会。
第一种方法,start的源码里面有如下结构
while(falg){
}
flag刚开始为true,start执行完之后,flag置为false,循环体不会再执行,所以运行结果会出错

cyand1987
cyand1987 回复Bealing: 我也测试了,没问题,复制错了。。。谢了额。
一年多之前 回复
bealing
bealing 回复cyand1987: 我测试了一下,你上面的两种方法没有问题呀,你的问题出在那?
一年多之前 回复
bealing
bealing 回复cyand1987: 不是的,其实我有一点没看懂你的问题。我说的是第一种方法中start源码的实现机制,不是说run里面有没有for循环
一年多之前 回复
cyand1987
cyand1987 如果第一种方法里有for循环,第一种就会报错,而第二种不会是吗?
一年多之前 回复
caozhy
caozhy   Ds   Rxr 2016.03.17 23:16

上面的方法不和语法,thread构造函数必须要一个Runnable接口的类作为参数

cyand1987
cyand1987 回复caozhy: Thread不是实现了Runnable接口吗,我复写了Runnable的run方法,哪里错了?
一年多之前 回复
caozhy
caozhy 回复cyand1987: 你必须实现一个Runnable接口
一年多之前 回复
cyand1987
cyand1987 thread构造函数为空也是可以的,没有报错
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!