阅读背景:

FutureTask解析源码

来源:互联网 

1:使用

package com.huiguan.facade.mobile;

import java.util.concurrent.*;

/**
 * @author chengwei
 * @since $$Revision:1.0.0, $$Date: 2018/4/26 11:39 $$
 */
public class FutureDemo {
    public static void main(String[] args) {
        try {
            //创建线程池,此线程池创建为非推荐方式
            ExecutorService threadPool = Executors.newCachedThreadPool();
            //task是线程
            Task task = new Task();
            FutureTask<String> futureTask = new FutureTask<String>(task);
            //submit运行有返回值的线程,execute运行无返回值的线程
            threadPool.submit(futureTask);
            //get方法会阻塞,直到task线程运行结束,才会获取返回值
            String s = futureTask.get();
            System.out.println(s);
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }

    }
}
package com.huiguan.facade.mobile;

import java.util.concurrent.Callable;

/**
 * @author chengwei
 * @since $$Revision:1.0.0, $$Date: 2018/4/26 11:39 $$
 */
public class Task implements Callable {
    @Override
    public String call() throws Exception {
        //线程休眠1s,方便观察FutureTask.get的阻塞现象
        Thread.sleep(1000);
        return "qqqqqqq";
    }
}package com.huiguan.facade.mobile



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: