是否存在实施以下方法的现有框架?
bmp.Save()
需要某种对象包装器,它将使调用者线程成为其他线程,直到另一个线程将设置该对象。
答案 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();