Future模式是异步的,类似于前端主页面和ajax请求。主线程和子线程可以异步执行,上代码。
首先定义一个UserFutrue类,实现Callnable接口
public class UserFutrue implements Callable<String>
定义成员变量接收String类型的值,定义构造函数;实现call方法。方法里面就是异步执行的方法体,此处休眠5秒钟用来模拟业务处理。
private String params;
public UserFutrue(String params){
this.params = params;
}
/**
* 异步执行Future
* main主线程执行完了以后,异步线程还能打印
* */
@Override
public String call() throws Exception {
Thread.sleep(5000);
String result = this.params+"处理完成";
System.out.println(result);
return result;
}
定义main函数,启动线程池,异步执行futrue线程。
public static void main(String[] args) {
String queryStr = "query";
FutureTask<String> futureTask = new FutureTask<String>(new UserFutrue("queryStr"));
ExecutorService executorService = Executors.newFixedThreadPool(1);
executorService.submit(futureTask);
System.out.println("Hello World!");
System.out.println(futureTask.isDone());
//判断异步是否执行完了
// while(!futureTask.isDone()){}
// executorService.shutdown();
}
打印结果:
整体代码如下:
import com.sun.corba.se.impl.orbutil.closure.Future;
import java.util.concurrent.*;
/**
* 异步执行Future
* main主线程执行完了以后,异步线程还能打印
* */
public class UserFutrue implements Callable<String> {
private String params;
public UserFutrue(String params){
this.params = params;
}
/**
* 异步执行Future
* main主线程执行完了以后,异步线程还能打印
* */
@Override
public String call() throws Exception {
Thread.sleep(5000);
String result = this.params+"处理完成";
System.out.println(result);
return result;
}
public static void main(String[] args) {
String queryStr = "query";
FutureTask<String> futureTask = new FutureTask<String>(new UserFutrue("queryStr"));
ExecutorService executorService = Executors.newFixedThreadPool(1);
executorService.submit(futureTask);
System.out.println("Hello World!");
System.out.println(futureTask.isDone());
//判断异步是否执行完了
// while(!futureTask.isDone()){}
// executorService.shutdown();
}
}