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()方法里面的循环输出次数调大点就好了。。 展开
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()方法里面的循环输出次数调大点就好了。。 展开
3个回答
展开全部
你只创建了一个SecondThread实例,两个线程都会调用这个实例的run方法,而方法里也没有sleep或者yield方法能够让线程主动休眠,于是线程A就一直跑完(只循环3次,很短),等到线程B有机会跑的时候,i已经是3了,就不跑了。调大了数可以是因为执行时间长了,线程A没跑完,操作系统就让它休眠,让线程B跑,此时i还没到循环次数,所以就可以了。
不知道你想做什么,如果是不共享i变量,应该创建两个SecondThread实例,这样线程A和线程B就各跑各的。
不知道你想做什么,如果是不共享i变量,应该创建两个SecondThread实例,这样线程A和线程B就各跑各的。
展开全部
你的st 实际上同一个对象,这样A先运行,由于只有三次所以B还没运行或者B刚运行发现循环条件不满足即退出,st就结束了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你确定?不是都应该
Thread A 0
Thread B 0
Thread A 1
Thread B 2
或则其它顺序,但是A B肯定都会执行?
Thread A 0
Thread B 0
Thread A 1
Thread B 2
或则其它顺序,但是A B肯定都会执行?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询