gpt4 book ai didi

java - 如何按条件唤醒线程

转载 作者:行者123 更新时间:2023-11-29 05:08:39 25 4
gpt4 key购买 nike

当然,我有一个 Activity 在 UI 线程上运行,还有另一个线程在后台运行并使用 Handler post 方法(通过循环程序)与 Activity 通信。
当屏幕关闭或应用程序隐藏时,它会继续工作。
所以我需要在 onPause 方法中停止这个线程并在 onResume 方法中唤醒它。
在我的线程中,我有条件暂停或停止它。
如何让线程在 onPause 方法中 hibernate 。并在 Activity 再次出现在前台后将其唤醒。
我可以使用监视器调用 wait 方法对一个对象执行此操作,而不是通知该对象。
但这是好方法吗?或者还有另一种方法可以优雅地做到这一点。

最佳答案

听起来是个使用十字转门的好地方。使用一个许可初始化信号量:

Semaphore turnstile = new Semaphore(1);

让您的后台 Activity 周期性地通过十字转门,如下所示:

turnstile.acquire();
turnstile.release();

当前台线程希望后台线程在转门处暂停时,它可以锁定转门:

turnstile.acquire();

当前台线程希望后台线程再次开始工作时,它可以解锁 turnstile():

turnstile.release();

好的软件工程实践是将整个事情包装在一个 Turnstile 类中,并使用适当命名的方法供前台和后台线程调用。我将把它留给读者作为练习。

关于java - 如何按条件唤醒线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29516940/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com