问题描述
我意识到我要问的是比特定的Codename One问题更通用的Java问题,无论如何,考虑到参考API是Codename One的问题,是否有一种更优雅,更可靠的方式来处理情况像下面的代码?如果我需要同步制作本质上与回调异步的代码,则会发生这种情况:
while (lock) {
CN.invokeAndBlock(() -> Util.sleep(500));
}
我在这里引用了这样的代码:https://github.com/codenameone/CodenameOne/issues/3192
解决方法
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;
}
}