2013-02-15 73 views
0

我不明白为什么我无法启动线程,我该怎么做?IllegalMonitorStateException:对象未被线程锁定

scheduleTaskExecutor = Executors.newScheduledThreadPool(1); 
     scheduleTaskExecutor.scheduleAtFixedRate(runUpdatePreOrders, 0, 
       timeRepeat, TimeUnit.MILLISECONDS); 

private Runnable runUpdatePreOrders = new Runnable() { 
     public void run() { 
      synchronized (runUpdatePreOrders) { 

        try { 
         if (pause) wait(); 
        } catch (InterruptedException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 

       new UpdateOrders(min_price, listener).execute(); 
       Log.e("UpdateBrodcast", "StartPreOrder"); 
      } 
     } 
    }; 

@Override 
    public void onStart() { 
     super.onStart(); 

     if (pause) { 
      runUpdatePreOrders.notify(); // this IllegalMonitorStateException: object not locked by thread before 
     } 

     pause = false; 


    } 

回答

4
 synchronized (runUpdatePreOrders) { 

       try { 
        if (pause) runUpdatePreOrders.wait(); 
       } catch (InterruptedException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 

      new UpdateOrders(min_price, listener).execute(); 
      Log.e("UpdateBrodcast", "StartPreOrder"); 
     } 
    } 

,如果你同步一个对象,你应该叫等待,并通知同一对象上

编辑

if (pause) { 
     synchronized (runUpdatePreOrders) { 
      runUpdatePreOrders.notify(); // this IllegalMonitorStateException: object not locked by thread before 
     } 
    } 
+0

如果(暂停)runUpdatePreOrders.wait();你呼吁等待不runUpdatePreOrders,但在“这个”对象 – Blackbelt 2013-02-15 10:30:13

+0

我明白=)谢谢=) – 2013-02-15 10:33:34

+0

不客气 – Blackbelt 2013-02-15 10:34:11

相关问题