Future 异步任务 in Java

Future 异步任务

定义Callable接口的实现

import java.util.concurrent.Callable;

public class RealDataCallable implements Callable<String> {
    
    private String para;
    public RealDataCallable(String para) {
    this.para = para;
    }

    @Override
    public String call() throws Exception {
    StringBuffer sb = new StringBuffer();
    for(int i=0; i<10; i++) {
        sb.append(para);
        Thread.sleep(1000);
    }
    return sb.toString();
    }

}
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;

public class FutureDemo {

    public static void main(String[] args) throws InterruptedException, ExecutionException {

    FutureTask<String> future = new FutureTask<String>(new RealDataCallable("a"));
    
    ExecutorService es = Executors.newFixedThreadPool(1);
    //Future 是异步任务,提交请求之后,这里必然是立即返回的,因为程序不会阻塞
    //接下来,不用关心数据是如何产生的。
    //可以去做一些额外的事情,然后在需要的时候可以通过Future.get()得到实际的数据
    es.submit(future);
    System.out.println("请求完毕");

    //使用 sleep 代替其他业务逻辑的处理
    Thread.sleep(1000);
    //获得call()方法的返回值,如果此时call()方法没有执行完成,则会等待
    System.out.println("数据: " + future.get());
    }

}

 

上一篇:Java专业术语


下一篇:java基础——线程池