九尾狗 2015-09-10 13:06 采纳率: 0%
浏览 1663

Thread多线程stopSleep顺序问题

今天呢,学习了javase多线程,里面的睡眠sleep问题有点困扰:

 public class Thread_06_stopSleep{
    public static void main(String[] args)throws Exception{
        Processor p = new Processor();
        Thread t = new Thread(p);
        t.start();//
        Thread.sleep(5000);//Thread:代表了当前代码所在的类那个线程,main()
        for(int i=0; i < 10; ++i){
            System.out.println( Thread.currentThread().getName()+"----->" + i );
        }
        p.run = false;
    }
}


class Processor implements Runnable{
    boolean run = true;
    public void run(){ 
        for(int i=0; i < 10; ++i){
            if (run) {//如果run为假的话.sleep就不执行了
                try{
                    Thread.sleep(1000);
                }catch(Exception e){
                    e.printStackTrace();
                }
                System.out.println( Thread.currentThread().getName()+"----->" + i );
            }else{
                System.out.println( "sleep,被唤醒了" );
                return; //终止函数运行,这里也就是杀死当前线程
            }
        }
    }

但是为什么输出完以后,为什么下面还有一次为真?效果图如下:
图片说明

  • 写回答

1条回答 默认 最新

  • Evankaka 博客专家认证 2015-09-10 13:57
    关注

    应该是这样子的,刚好运行到main-->9,然后主线程CPU时间片到了,然后到Thread-0-->5执行,它Thread-0执行sleep.又跑回main,执行p.run=false;
    然后main结束。等Thread-0上一次的sleep到,执行Thread-0,run =false,执行被唤醒了

    评论

报告相同问题?

悬赏问题

  • ¥15 pcl运行在qt msvc2019环境运行效率低于visual studio 2019
  • ¥15 MAUI,Zxing扫码,华为手机没反应。可提高悬赏
  • ¥15 python运行报错 ModuleNotFoundError: No module named 'torch'
  • ¥100 华为手机私有App后台保活
  • ¥15 sqlserver中加密的密码字段查询问题
  • ¥20 有谁能看看我coe文件到底哪儿有问题吗?
  • ¥20 我的这个coe文件到底哪儿出问题了
  • ¥15 matlab使用自定义函数时一直报错输入参数过多
  • ¥15 设计一个温度闭环控制系统
  • ¥100 rtmpose姿态评估