java 线程基础问题!输出结果为什么不是一直出现Hello world!后面会乱序呢!出现world hello!

publicclassTheThreadextendsThread{@Overridepublicvoidrun(){inti=0;while(i<50){try{Thr... public class TheThread extends Thread {
@Override
public void run() {
int i = 0;
while(i<50){
try {
Thread.sleep(3000); //线程休眠
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.print(" world!"); //输出字符串
i++;
}

}

}

public class Test {

public static void main(String[] args) throws InterruptedException {
TheThread tt = new TheThread(); //实例化线程
tt.start(); //启动线程
int k = 0;
while(k<50)
{
Thread.sleep(3000); //线程休眠
System.out.print(" hello"); //输出字符串
k++;
}
}

}
展开
 我来答
daizhenliang
2012-03-22
知道答主
回答量:30
采纳率:0%
帮助的人:15.5万
展开全部
因为线程的执行顺序是不固定的,你这里总共有两个线程,一个main线程,一个tt线程,并不是按顺序交替执行这两个线程的,有可能main线程执行了10几次后才执行tt线程一次,反过来也有可能的。
童音婼幻Ds
2012-03-22 · TA获得超过334个赞
知道小有建树答主
回答量:389
采纳率:100%
帮助的人:144万
展开全部
亲,是这样的一个main线程,一个tt线程这两个线程之间是相互竞争的,他们各自有各自的任务,只要jvm有空就会执行他们中间的任何一个,当然如果在sleep就不能执行了.
public class TheThread extends Thread {
@Override
public void run() {
int i = 0;
while (i < 10) {
try {
Thread.sleep(150); //线程休眠
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.print("world!\n"); //输出字符串
i++;
}

}

public static void main(String[] args) throws InterruptedException {
TheThread tt = new TheThread(); //实例化线程
tt.start(); //启动线程
int k = 0;
while (k < 10) {
Thread.sleep(30); //线程休眠
System.out.print("hello\n"); //输出字符串
k++;
}
}

}
输出结果
hello
hello
hello
hello
hello
world!
hello
hello
hello
hello
world!
hello
world!
world!
world!
world!
world!
world!
world!
world!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
luoweiii
2012-03-22 · 超过12用户采纳过TA的回答
知道答主
回答量:48
采纳率:0%
帮助的人:38.4万
展开全部
当两个线程启动后,时间小到纳秒级时cup也是一个线程一个线程的运行,一个线程运行几纳秒另一个再运行几纳秒,只是我们看起来好像是两个线程在一起运行,所以有可能tt线程多运行几纳秒那么就是先打印world
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式