java 从1.5 版本后提供 Executors 类可以方便的创建线程池。
在异步调用时候,就是通过线程池里的线程去执行任务。
那如何获取到执行的结果呢 - Future
通过代码来看如何获取返回值
public class ExecutorsTest {
private static final Logger logger = LoggerFactory.getLogger (ExecutorsTest.class);
private ExecutorService executor = Executors.newSingleThreadExecutor();
public static void main(String[] args) {
ExecutorsTest executorsTest = new ExecutorsTest ();
logger.info ("start test");
executorsTest.sendMsg ("hello river");
executorsTest.sendMsg ("I am fine ,thank you");
}
public void sendMsg(String msg){
Future<String> future = executor.submit(new CallableRequest(msg));
try {
System.out.println(future.get());
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
class CallableRequest implements Callable<String> {
private String msg ;
public CallableRequest(String msg) {
super();
this.msg = msg;
}
@Override
public String call() {
return "message : " + msg ;
}
}
}
执行结果
message : hello river
message : I am fine ,thank you
通过Future的get方法获取到了,异步执行线程方法的返回值。
网友评论