让线程等待另一个线程的执行

时间:2014-12-23 20:23:10

标签: java multithreading asynchronous threadpool zk

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

1 个答案:

答案 0 :(得分:2)

类似的东西:

static Object lock;

...

if (objectYouAreHopingHasBeenCached == null) {
  synchronized (lock) {
    if (objectYouAreHopingHasBeenCached == null) {
       // fetch the object, put in in objectYouAreHopingHasBeenCached
    }
  }
}
return objectYouAreHopingHasBeenCached;