Java编程

并发编程系列之Future类的主要功能介绍

2021-12-21  本文已影响0人  smileNicky

并发编程系列之Future类的主要功能介绍

1、什么是Future类?

Future类:future类的是一种异步任务监视器,可以让提交者可以监视任务的执行,同时可以取消任务的执行,也可以获取任务返回结果

2、Future类的作用

比如在做一定的任务运算的时候,需要等待比较长时间,这个任务是比较耗时的,需要比较繁重的运算,比如加密、压缩等等。如果一直在等程序执行完成是不明智的,这时可以将这个比较耗时的任务交给子线程执行,然后通过Future类监控线程执行,获取返回的结果。这样一来就提高了工作效率,这是一种异步的思想。

3、Future方法和用法

通过idea看一下Future类的类学习,可以看到这个类只有5个方法,基于jdk1.8:


在这里插入图片描述
public interface Future<V> {

    boolean cancel(boolean mayInterruptIfRunning);
    
    boolean isCancelled();
    
    boolean isDone();

    V get() throws InterruptedException, ExecutionException;

    V get(long timeout, TimeUnit unit)
        throws InterruptedException, ExecutionException, TimeoutExceptio
}
执行抛出异常:`Exception in thread "main" java.util.concurrent.ExecutionException: java.lang.IllegalArgumentException: callable exception `


* 第四种情况:**任务被取消了**,这种情况调用get方法会抛出`CancellationException`
* 第五种情况:**任务超时执行**,这种情况是针对`get(long timeout, TimeUnit unit)`这个方法来说的,我们设置了`timeout`超时时长,如果超过了设定的值,就会抛出`TimeoutException`
在这里插入图片描述
package com.example.concurrent.future;

import java.util.Random;
import java.util.concurrent.*;

/**
 * <pre>
 *      Future例子
 * </pre>
 * <p>
 * <pre>
 * @author nicky.ma
 * 修改记录
 *    修改后版本:     修改人:  修改日期: 2021/08/28 17:11  修改内容:
 * </pre>
 */
public class FutureExample {

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        ExecutorService service = new ThreadPoolExecutor(10, 10,
                60L, TimeUnit.SECONDS,
                new ArrayBlockingQueue(10));

        Future<Integer> future = service.submit(new CallableTask());
        System.out.println(future.get());

        service.shutdown();
    }

    static class CallableTask implements Callable<Integer> {
        @Override
        public Integer call() throws Exception{
            Thread.sleep(1000L);
            return new Random().nextInt();
        }
    }
}

上一篇下一篇

猜你喜欢

热点阅读