求教各位达人,假设有这样一个场景:线程A在start之后去查询某个条件,发现条件不满足,于是sleep 10秒,意图是10秒之后再去查询一次这个条件,如果还不满足,则执行某种操作,否则执行另一种操作。
另外有一个线程B,它可能去操作某些数据,使线程A查询的条件由不满足变为满足。我想问的是,如果A已经进入sleep了,但是还没到10秒,例如才只有2秒的时候,线程B修改了条件,使A的查询条件满足,那么能否通过某种方式让A立即醒过来而不必傻等10秒结束再醒?
notify方法能否让A提前醒过来?

解决方案 »

  1.   

    中断?sleep的时候可以中断线程?看API上说的好像这样会抛出一个异常啊,而且即使可以,那么中断之后我怎么继续让A运行下去呢?
      

  2.   

    应该不会, notify 是用来使那些wait()的线程得到激活的机会。
      

  3.   

    sleep(10*1000) 和 interrupt 配对使用
    或wait(10*1000)与notifyAll配合使用
      

  4.   

    接参数sleep(20000) 自动唤醒
      

  5.   

    A{
       run()
         {
           if(如果不符合条件){
             B b= new B();
             b.start();
             b.jion();
          }     }
    }
      

  6.   

    我觉得首先,lz所说场景就不适合用sleep。既然是有条件不满足阻塞,那么自然用wait是最合适的。不断的sleep首先不好掌握,二是浪费资源。
    如果用wait,那当然就要配合使用notify
      

  7.   

    不建议用interrupt捕获
    还是wait的好
      

  8.   

    我晕,C#里面 没有 notifyAll