代码大意如下——
首先,我写了一个类,继承timertask
class MyTask extends TimerTask{
    public boolean flag;//其中一个属性,用来记录task完成的结果    public void run(){
       if(某条件)
          flag = true;
    }
}第二,写了一个普通类,里面的一个方法依赖该线程的执行结果
class MyClass{
     MyTask myTask=new MyTask();
     public void aMethod(){
         while(!myTask.flag)
             continue;
         doOtherThing();
     }
}该方法需要一直等到线程的flag属性为真时,才能做后续处理,否则就一直等待着。但是,用while循环这样一直等待,CPU占用率极高,请问大家有没有好的改进方法呢???
多谢!

解决方案 »

  1.   

    加一个sleep()或者yield()
    class MyClass{
         MyTask myTask=new MyTask();
         public void aMethod(){
             while(!myTask.flag){
                 try{
                    Thread.sleep(100);
                 } catch(Exception ex){
                 }
             doOtherThing();
         }
    }
      

  2.   

    如果是测试用,可以用profiler这样的插件来看结果,不过用着挺麻烦的
      

  3.   

    public void aMethod(){
             while(!myTask.flag)
                 continue;
             doOtherThing();
         }
    你这样程序就一直不停的循环着,把continue改成wait()。当run()方法执行的时候再调用notify()方法即可。
      

  4.   

    为什么不直接在MyTask中标志变量为真时执行想执行的MyClass里的程序?或者非要用另外一个类侦测的话,为什么不再同样继承timertask呢
      

  5.   

    首先去掉普通类中的循环,将flag=true替换成其他类方法的触发调用或触发消息,普通类侦听这个消息即可。