-1
我有一個MyService
類,它包含一個嵌套BroadcastReceiver
類:wait()的通知()不按預期工作
public class MyService {
private Object lock;
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
synchronized(lock) {
doTask();
lock.wait();
Log.d(TAG, "After wait ...");
}
}
}
private synchronized void doTask() {
Log.d(TAG, "do task ...");
synchronized(lock) {
lock.notify();
}
}
}
正如你看到的上面,當onReceive()
叫,我的代碼運行doTask()
在一個塊。然後,在doTask()
函數中,我的代碼運行lock.notify()
。我期望看到登錄終端Log.d(TAG, "After wait ...");
我運行我的Android項目。當onReceive()被觸發,我可以看到日誌「做任務...」,然後,它掛在那裏,我看不到日誌「等待......」,爲什麼我的等待通知沒有按預期工作?
同一個線程正在調用這兩個方法嗎? –
可能是「丟失的通知」。 http://stackoverflow.com/questions/5999100/is-there-a-block-until-condition-becomes-true-function-in-java/26218153#26218153'lock.notify()'_什麼都不做_除非其他線程已經在'lock.wait()'調用中等待。 –