wait()notify()未按预期工作

时间:2015-12-06 16:36:57

标签: java android multithreading wait notify

我有一个AnyObject类,其中包含嵌套 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()块中运行doTask()。然后,在synchronized函数中,我的代码运行doTask()。我希望看到登录终端lock.notify()

我运行我的Android项目。当onReceive()被触发时,我可以看到日志“做任务...... ”,然后,它挂在那里,我看不到日志“等待...... < / strong>“,为什么我的等待通知没有按预期工作?

1 个答案:

答案 0 :(得分:0)

  

我运行我的Android项目。当onReceive()被触发时,我可以看到   log&#34;做任务...&#34;然后,它挂在那里,我看不到log&#34; After   等等......&#34;,为什么我的wait-notify没有按预期工作?

BroadcastReceiver始终在ui线程上运行。如果MyService在Ui线程上运行,那么您遇到的就是死锁。也可能MyService在后​​台线程上运行。如果在等待之前执行通知,则运行MyService的线程正在等待下一个通知