JAVA中通过实现Runnable接口来创建多线程的疑问

代码如下:classSecondThreadimplementsRunnable{privateinti;publicvoidrun(){for(;i<3;i++){Sy... 代码如下:
class SecondThread implements Runnable{
private int i;
public void run(){
for (; i < 3; i++){
System.out.println(Thread.currentThread().getName() + " " + i);
}
}
}
public class ThreadDemo02{
public static void main(String args[]){
SecondThread st = new SecondThread();
new Thread(st, "Thread A").start();
new Thread(st, "Thread B").start();
}
}
运行结果如下:
-------------------------------------------------
Thread A 0
Thread A 1
Thread A 2
-------------------------------------------------

问题:
试图通过类Thread的构造方法 Thread(Runnable target, String name)来创建两个线程Thread A 和Thread B, 但是输出结果只有Thread A。。Thread B怎么没有输出呢??
难道是别人说的那样,通过同一个Runnable接口实例来创建的多线程实际上还是一个单一的线程,只不过它们的优先级一样吗??那么这里为什么Thread B一次也没有出现过呢??
解决了,,靠。。。 在线程主体run()方法里面的循环输出次数调大点就好了。。
展开
 我来答
LMLU23
2014-07-01 · TA获得超过901个赞
知道小有建树答主
回答量:373
采纳率:0%
帮助的人:359万
展开全部
你只创建了一个SecondThread实例,两个线程都会调用这个实例的run方法,而方法里也没有sleep或者yield方法能够让线程主动休眠,于是线程A就一直跑完(只循环3次,很短),等到线程B有机会跑的时候,i已经是3了,就不跑了。调大了数可以是因为执行时间长了,线程A没跑完,操作系统就让它休眠,让线程B跑,此时i还没到循环次数,所以就可以了。
不知道你想做什么,如果是不共享i变量,应该创建两个SecondThread实例,这样线程A和线程B就各跑各的。
问道菲菲
2014-07-01 · TA获得超过133个赞
知道小有建树答主
回答量:110
采纳率:0%
帮助的人:102万
展开全部
你的st 实际上同一个对象,这样A先运行,由于只有三次所以B还没运行或者B刚运行发现循环条件不满足即退出,st就结束了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hhxlyl
2014-07-01 · TA获得超过392个赞
知道小有建树答主
回答量:380
采纳率:100%
帮助的人:429万
展开全部
你确定?不是都应该
Thread A 0
Thread B 0
Thread A 1
Thread B 2
或则其它顺序,但是A B肯定都会执行?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式