Java等待对象容器

时间:2016-10-24 14:56:47

标签: java

是否存在实施以下方法的现有框架?

bmp.Save()

需要某种对象包装器,它将使调用者线程成为其他线程,直到另一个线程将设置该对象。

1 个答案:

答案 0 :(得分:1)

这听起来像CompletableFuture

// container.actuate(o); becomes
future.complete(o);

// container.peekAwait(); becomes
future.get();

如果您不能使用Java 8,FutureTask是解决方法的不错选择,但您可以提供一个返回您想要设置的值的Callable,而不是显式设置它。

final FutureTask<Object> lazyLoadedData = new FutureTask<>(() -> expensiveIO());

...

if (!lazyLoadedData.isDone()) {
    synchronized(lazyLoadedData) {
        if (!lazyLoadedData.isDone()) {
            // run() does the computation and sets the data
            // essentially, lazyLoadedData.set(expensiveIO())
            lazyLoadedData.run();
        }
    }
}
// Data is available
lazyLoadedData.get();

如果计划让ExecutorService执行此操作,它已经返回Future;

final FutureTask<Object> future = executorService.submit(() -> expensiveIO());

// Now you just need to call get()
future.get();