java future

作者:原创时间:2022-03-31
文档

很多朋友都想知道java future是什么,下面就一起来了解一下吧~

Future代表一个异步计算的结果,并且它提供一些方法来让调用者检测异步过程是否完成,或者取得异步计算的结果,或者取消正在执行的异步任务。

public class Test {
    private static ExecutorService executorService = Executors.newSingleThreadExecutor();


    public static void main(String[]args){
        System.out.println("hello world");

        Futurefuture = calcute(9);
        while (!future.isDone()){
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            } finally {
                System.out.println("正在执行");
            }
        }
        try {
            int result = future.get();
            System.out.println("result = " + result);
        } catch (ExecutionException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    
    public static Futurecalcute(Integer i) {
        return executorService.submit(() -> {
            Thread.sleep(1000);
            System.out.println("return future for " + i);
            return i *i;
        });
    }}

一个简单Future使用用例写完,使用线程池+Callback+Future,完成了一个简单的计算操作。

Future是一个接口,先看一下内部方法:

public interface Future {
    boolean cancel(boolean var1);

    boolean isCancelled();

    boolean isDone();

    V get() throws ExecutionException, InterruptedException;

    V get(long var1, TimeUnit var3) throws ExecutionException, InterruptedException, TimeoutException;}

get()函数是返回计算结果,注意get会同步操作,没有返回结果前,会阻塞线程。
get还有一个重载函数get(long var1, TimeUnit var3),第一个参数是时长,第二个是单位。
表示在多少时长内获取结果,如果仍未返回,则抛出异常TimeoutException。

try{
    int result2 = future2.get(1000, TimeUnit.MILLISECONDS);} catch(TimeoutException e) {
    e.printStackTrace();}

cancel(boolean) 表示是否取消该future,

不能在调用cancel(true)/cancel(false)后,调用get()函数,否则会抛出异常CancellationException

isCancelled()函数是判断该future是否已取消

isDone()函数是判断该future是否已完成

isDone()函数是实时状态读取,不会阻塞线程。

Callback

Callback 是一个接口,内部只有一个函数

@FunctionalInterfacepublic interface Callable {
    V call() throws Exception;}

以上就是小编今天的分享,希望可以帮到大家。

显示全文
java generator java enhancer java generic java enterprise java environment java epoll java error java escape java event java exchange java execute 微信群怎么找 怎么导出微信聊天记录 苹果手机怎么恢复出厂设置 qq怎么清理缓存和垃圾清理 朋友圈怎么转发 微信分组怎么删除 两个excel如何独立显示 excel怎么排序 计算机管理怎么打开 java encapsulation java empty java email java ehcache java echarts java formatter java ecc加密 java fork java foreach循环 java ear java flume java dynamic java dto java drools java flink java dowhile java flatmap java findfirst java fileinputstream java file.exists()