FutureTask使用

FutureTask使用

FutureTask介绍

FutureTask 表示一个异步运算的任务。FutureTask 里面可以传入一个 Callable 的具体实现类,可以对这个异步运算的任务的结果进行等待获取、判断是否已经完成、取消任务等操作。

FutureTask实现接口

FutureTask实现了RunnableFuture接口,而接口RunnableFuture继承了Runnable, Future。

public class FutureTask<V> implements RunnableFuture<V>
public interface RunnableFuture<V> extends Runnable, Future<V> 

FutureTask构造函数

FutureTask有两个构造函数,分别可以接受Callable和Runnable的实现类。

public FutureTask(Callable<V> callable) {
    if (callable == null)
    throw new NullPointerException();
    this.callable = callable;
    this.state = NEW;       // ensure visibility of callable
}


public FutureTask(Runnable runnable, V result) {
    this.callable = Executors.callable(runnable, result);
    this.state = NEW;       // ensure visibility of callable
}

FutureTask的使用

因为FutureTask实现了RunnableFuture接口,而接口RunnableFuture继承了Runnable。所以可以使用Thread来start(),也可以使用线程池executor.execute()和executorService.submit()

又因为接口RunnableFuture继承了 Future接口,我们可以通过FutureTask来获取线程执行的结果。

public static void main(String[] args) {
        //创建一个FutureTask
        FutureTask futureTask = new FutureTask(new Callable() {
            @Override
            public Object call() throws Exception {
                System.out.println("执行call,并返回数值");
                return 5;
            }
        });
		
    	//用线程池
    	//Executor executor = Executors.newCachedThreadPool();
    	//ExecutorService pool = Executors.newFixedThreadPool(5);
    	//executor.execute(futureTask);
        //pool.submit(futureTask);
    
        //创建Thread
        Thread thread = new Thread(futureTask);
        //启动线程
        thread.start();

        try {
            Integer result = (Integer) futureTask.get();
            System.out.println("获得的线程执行结果:"+result);
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
    }

结果

执行call,并返回数值
获得的线程执行结果:5
posted @   鸭梨的药丸哥  阅读(9)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示