多线程中的Future接口及其实现

Future接口


public interface Future<V> {
	//尝试取消此次任务  mayInterruptIfRunning - true如果执行该任务的线程应该被中断; 否则,正在进行的任务被允许完成 
    boolean cancel(boolean mayInterruptIfRunning);
	//如果此任务在正常完成之前被取消,则返回 true 。 
    boolean isCancelled();
	//返回true如果任务已完成。 完成可能是由于正常终止,异常或取消 - 在所有这些情况下,此方法将返回true 。 
    boolean isDone();
	//等待计算完成然后返回结果
    V get() throws InterruptedException, ExecutionException;
    //在指定的时间之内进行等待,超时不等待
    V get(long timeout, TimeUnit unit)
        throws InterruptedException, ExecutionException, TimeoutException;
}

FutureTask

使用方法
因为FutureTask实际上是实现的RunnableFuture接口,而RunnableFuture接口其实是继承自RunnableFuture,所以其同时具有他们共同的特点,可以直接交给线程池进行执行。

ExecutorService executorService = Executors.newSingleThreadExecutor();
        FutureTask<Integer> integerFutureTask = new FutureTask<Integer>(new Callable<Integer>() {
            @Override
            public Integer call() throws Exception {
                int sum=0;
                for (int i = 0; i < 10; i++) {
                    sum+=i;
                }
                return sum;
            }
        });
        executorService.execute(integerFutureTask);
        
        //获取Future的第二种方式
        Future<Integer> submit = executorService.submit(new Callable<Integer>() {
            @Override
            public Integer call() throws Exception {
                int sum=0;
                for (int i = 0; i < 10; i++) {
                    sum+=i;
                }
                return sum;
            }
        });
        

        System.out.println("在这里随便做什么事");

        System.out.println(integerFutureTask.get());
        //效果和上面相同只不过设定的最长等待时间为2s  TimeUnit用来设置时间单位
        System.out.println(integerFutureTask.get(2,TimeUnit.SECONDS));

Future其实就相当于你把一件工作交给某个人来完成,而你最后只需要干你自己的事,到时间了找他要已经做好的成品就好了。
就如同领导发号施令:给你一个DeadLine,让你干某件事,然后你给领导在规定时间干完,等领导来要结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值