问题描述
- 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; //终止函数运行,这里也就是杀死当前线程 } } }
解决方案
多线程 Thread
----------------------
解决方案二:
应该是这样子的,刚好运行到main-->9,然后主线程CPU时间片到了,然后到Thread-0-->5执行,它Thread-0执行sleep.又跑回main,执行p.run=false;
然后main结束。等Thread-0上一次的sleep到,执行Thread-0,run =false,执行被唤醒了
时间: 2024-10-06 03:54:31