在Java ZK应用程序中,在ViewModel中,我有多个执行特定功能的线程。第一次由任何线程执行该函数需要很长时间但在执行一次之后,它会在其他线程执行时立即返回,因为它具有在缓存中检索的值。但它应该第一次只由一个线程执行,好像多个线程执行该函数一样,当它们每个调用相同的函数时,它不会返回任何一个,因为缓存保持为空,因此返回时间加起来对于他们所有人。 因此,如何让其他线程等待第一个线程完成,因为线程属于不同的对象,因此同步该方法在这里不起作用。这里可以使用一个变量,它可以与第一个线程完成的其他线程通信吗?请注意,所有线程都属于同一个类的不同对象,即ViewModel,它不能扩展线程类或实现Runnable,因为它是ZK框架类。 可以建议任何解决方案。
答案 0 :(得分:2)
类似的东西:
static Object lock;
...
if (objectYouAreHopingHasBeenCached == null) {
synchronized (lock) {
if (objectYouAreHopingHasBeenCached == null) {
// fetch the object, put in in objectYouAreHopingHasBeenCached
}
}
}
return objectYouAreHopingHasBeenCached;