【问题标题】:Best way to wait until a variable changes its value等到变量更改其值的最佳方法
【发布时间】:2020-08-13 10:10:20
【问题描述】:

我意识到我要问的是一个通用的 Java 问题,而不是一个特定的 Codename One 问题,无论如何,考虑到参考 API 是 Codename One 的,是否有一种更优雅、更可靠的方法来处理一种情况喜欢下面的代码?如果我需要同步编写本质上与回调异步的代码,就会发生这种情况:

while (lock) {
   CN.invokeAndBlock(() -> Util.sleep(500));
}

我在这里引用了这样的代码:https://github.com/codenameone/CodenameOne/issues/3192

【问题讨论】:

    标签: codenameone


    【解决方案1】:

    JavaSE 有一些非常酷的功能可以做到这一点,但我们目前不支持它们,例如CountDownLatch.

    但这仍然很容易做到:

    public class SharedVar<T> {
        private T var;
        public T get() { return var; }
        public synchronized void set(T var) {
           this.var = var;
           notifyAll();
        }
        public synchronized T waitForChange() {
           wait();
           return var;
        }
    }
    

    【讨论】:

    • 能否再补充一些解释?您的示例中的 notifyAll()wait() 是什么?
    • 它们是来自Object 类的方法。 wait() 在同步上下文中停止当前线程,notifyAll() 唤醒所有在给定锁上休眠的等待线程。由于两者都使用相同的锁(this),所以它可以工作。
    猜你喜欢
    • 2023-04-09
    • 2016-07-08
    • 2020-03-24
    • 1970-01-01
    • 1970-01-01
    • 2016-11-29
    • 1970-01-01
    • 1970-01-01
    • 2012-04-17
    相关资源
    最近更新 更多