首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java同步例证之FutureTask

2012-12-31 
java同步例子之FutureTask仅在计算完成时才能获取结果;如果计算尚未完成,则阻塞 get 方法。一旦计算完成,就

java同步例子之FutureTask
仅在计算完成时才能获取结果;如果计算尚未完成,则阻塞 get 方法。一旦计算完成,就不能再重新开始或取消计算.

package concurrent;import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.FutureTask;import java.util.concurrent.TimeUnit;import java.util.concurrent.TimeoutException;/** * FutureTask *  * @author user *  */public class FutureTaskTest {private final FutureTask<ProductInfo> future = new FutureTask<ProductInfo>(new Callable<ProductInfo>() {public ProductInfo call() throws InterruptedException {return loadProductInfo();}});public ProductInfo loadProductInfo() throws InterruptedException {System.err.println("=====waiting========");Thread.sleep(5000);return new ProductInfo();}private final Thread thread = new Thread(future);public void start() {thread.start();}public ProductInfo get() throws InterruptedException, ExecutionException,TimeoutException {try{return future.get(1, TimeUnit.SECONDS);} catch(TimeoutException e) {                        //future.cancel(true); //取消任务System.err.println("火速返回,失败!");return future.get(10, TimeUnit.SECONDS);}}/** * @param args * @throws ExecutionException * @throws InterruptedException * @throws TimeoutException */public static void main(String[] args) throws InterruptedException,ExecutionException, TimeoutException {FutureTaskTest test = new FutureTaskTest();test.start();System.err.println("=======begin========");System.err.println(test.get());System.err.println("=======end========");}}class ProductInfo {public String toString() {return "**ProductInfo**";}}

热点排行