读《JAVA并发编程实战》笔记
public class ProductInfo {
private String productName;
public ProductInfo(String productName) {
this.productName = productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
public String getProductName() {
return productName;
}
}
public class PreLoader {
private final FutureTask<ProductInfo> future = new FutureTask<ProductInfo>(new Callable<ProductInfo>() {
@Override
public ProductInfo call() throws Exception {
// 模拟耗时操作
Thread.sleep(10000);
return new ProductInfo("apple");
}
});
private final Thread thread = new Thread(future);
public void start() {
thread.start();
}
public ProductInfo get() {
try {
return future.get();
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
}
}
PreLoader使用FutureTask来执行一个高开销的计算,并且计算结果将在稍后使用,通过提前启动计算,可以减少在等待结果时需要的时间。
public class PreMain {
public static void main(String[] args) throws InterruptedException {
PreLoader preLoader = new PreLoader();
preLoader.start();
Thread.sleep(11000);
ProductInfo productInfo = preLoader.get();
System.out.println(productInfo.getProductName());
}
}