Future和Callable

Runnable的缺陷

不能返回返回值

不能抛出Checked Exception

Callable接口

实现call()
有返回值
可以抛出异常

Future类

Future和Callable的关系


Future的5个方法

1. get() :获取结果

2. get(long time, TimeUnit unit):有超时的获取

3. cancel():取消任务

4. isDone(): 判断线程是否执行完毕

执行完毕不代表成功执行了,执行失败,或者被中断也是执行完毕了,不再执行了

5. isCanceled():判断是否被取消

get的基本用法

用法一:线程池的Submit方法返回Future对象

线程池的submit方法返回Future对象.png

placeHolder是一个空的容器

/**
 * 描述:     演示一个Future的使用方法
 */
public class OneFuture {

    public static void main(String[] args) {
        ExecutorService service = Executors.newFixedThreadPool(10);
        Future<Integer> future = service.submit(new CallableTask());
        try {
            System.out.println(future.get());
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
        service.shutdown();
    }

    static class CallableTask implements Callable<Integer> {

        @Override
        public Integer call() throws Exception {
            Thread.sleep(3000);
            return new Random().nextInt();
        }
    }

}

用法二:用FutureTask创建Future

Future, FutureTask, Runnable的关系

/**
 * 描述:     演示FutureTask的用法
 */
public class FutureTaskDemo {

    public static void main(String[] args) {
        Task task = new Task();
        FutureTask<Integer> integerFutureTask = new FutureTask<>(task);
//        new Thread(integerFutureTask).start();
        ExecutorService service = Executors.newCachedThreadPool();
        service.submit(integerFutureTask);

        try {
            System.out.println("task运行结果:"+integerFutureTask.get());

        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
    }
}

class Task implements Callable<Integer> {

    @Override
    public Integer call() throws Exception {
        System.out.println("子线程正在计算");
        Thread.sleep(3000);
        int sum = 0;
        for (int i = 0; i < 100; i++) {
            sum += i;
        }
        return sum;
    }
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容