java线程睡眠问题
class MyRunnable4 implements Runnable{
public void run(){
for(int i=1;i<=10;i++){
System.out.print("X"+i+"X"+" ");
try{
Thread.sleep(2000); //使用sleep方法使线程进入睡眠状态2000毫秒
}
catch(InterruptedException e){
e.printStackTrace();
}
}
}
}
class MyRunnable5 implements Runnable{
public void run(){
for(int i=1;i<=10;i++){
System.out.print("Y"+i+"Y"+" ");
try{
Thread.sleep(3000);
}
catch(InterruptedException e){
e.printStackTrace();
}
}
}
}
public class DuoXianChengThreadSleep {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
MyRunnable4 mr4 = new MyRunnable4();
Thread t4 = new Thread(mr4);
MyRunnable5 mr5 = new MyRunnable5();
Thread t5 = new Thread(mr5);
t4.start();
t5.start();
}
}
为什么结果不是 t4.start()输出2个,t5.start()输出3个,以下是运行的结果
第一次:Y1Y X1X X2X Y2Y X3X Y3Y X4X X5X Y4Y X6X X7X Y5Y X8X Y6Y X9X Y7Y X10X Y8Y Y9Y Y10Y
第二次:X1X Y1Y X2X Y2Y X3X Y3Y X4X X5X Y4Y X6X X7X Y5Y X8X Y6Y X9X Y7Y X10X Y8Y Y9Y Y10Y
是不是线程睡眠,只要是几个线程的睡眠时间不同,结果也是不一样,是一个随机数,无法预测准确的结果
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
谢谢你,我也是这样想的,看来sleep是不可能按规律交替执行
这是线程创建,以及cpu时间片分配问题,你用睡眠是没有保证绝对的顺序的,因为不知道到底谁先执行,执行那个过程会发生什么。
本来线程并发运行就无法预测其执行顺序,即使加上睡眠时间也无法保证你期望的结果。你去掉睡眠时间,他们也不会按规律交替执行