java线程睡眠问题

发布于 2021-11-14 18:26:55 字数 2252 浏览 695 评论 3

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

一人独醉 2021-11-19 15:33:17

谢谢你,我也是这样想的,看来sleep是不可能按规律交替执行

终遇你 2021-11-17 22:13:20

这是线程创建,以及cpu时间片分配问题,你用睡眠是没有保证绝对的顺序的,因为不知道到底谁先执行,执行那个过程会发生什么。

甜扑 2021-11-15 02:44:43

本来线程并发运行就无法预测其执行顺序,即使加上睡眠时间也无法保证你期望的结果。你去掉睡眠时间,他们也不会按规律交替执行

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文