Java wait()notify()未按预期工作
我有一个Java wait()notify()未按预期工作,java,android,multithreading,wait,notify,Java,Android,Multithreading,Wait,Notify,我有一个MyService类,它包含一个嵌套的BroadcastReceiver类: public class MyService { private Object lock; public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { synchronized(loc
MyService
类,它包含一个嵌套的BroadcastReceiver
类:
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()
时,我的代码在synchronized
块中运行doTask()
。然后,在doTask()
函数中,我的代码运行lock.notify()
。我希望看到登录终端log.d(标记“After wait…”)代码>
我运行我的Android项目。触发onReceive()时,我可以看到日志“执行任务…””,然后,它挂在那里,我看不到日志“等待后…””,为什么我的等待通知没有按预期工作
我运行我的Android项目。触发onReceive()时,我可以看到
日志“做任务…”,然后,它挂在那里,我看不到日志“后
等待…,为什么我的等待通知未按预期工作
BroadcastReceiver
s始终在ui线程上运行。如果MyService
在Ui线程上运行,您将遇到死锁。也可能是MyService
在后台线程上运行。如果在等待之前执行通知,则运行MyService的线程正在等待下一个通知同一线程正在调用这两个方法?可能是“丢失通知”lock.notify()
不会执行任何操作,除非其他线程已经在lock.wait()调用中等待。