本文主要是介绍JAVA中的Future的简单用法(配合Callable),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Future非常用于适合在处理耗时很长的业务逻辑时进行使用,可以有效的的减少系统的响应时间,提高系统的吞吐量,其实就是就相当于new Thread去处理业务,但是Future可以获取返回结果,new Thread没有这样的功能,Future一般配合Callable接口来使用,Callable是一个接口,是一个泛型接口,用来传自定义的类型
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.FutureTask;public class UseFuture implements Callable<String> {private String para;public UseFuture(String para) {this.para = para;}/*** 这里是真实的业务逻辑,其执行可能很慢*/@Overridepublic String call() throws Exception {//模拟执行耗时Thread.sleep(5000);String result = this.para + "处理完成";return result;}//主控制函数public static void main(String[] args) throws Exception {String queryStr = "query";//构造FutureTask,并且传入需要真正进行业务逻辑处理的类,该类一定是实现了Callable接口的类FutureTask<String> future = new FutureTask<String>(new UseFuture(queryStr));FutureTask<String> future2 = new FutureTask<String>(new UseFuture(queryStr));//创建一个固定线程的线程池且线程数为1,ExecutorService executor = Executors.newFixedThreadPool(2);//这里提交任务future,则开启线程执行RealData的call()方法执行//submit和execute的区别: 第一点是submit可以传入实现Callable接口的实例对象, 第二点是submit方法有返回值
//这里的这个Future只能用来判断这个线程有没有执行完,想要获取线程执行的返回值还是需要使用自己定义的线程future来获取结果值。Future f1 = executor.submit(future); //单独启动一个线程去执行的Future f2 = executor.submit(future2);System.out.println("请求完毕");try {//这里可以做额外的数据操作,也就是主程序执行其他业务逻辑System.out.println("处理实际的业务逻辑...");Thread.sleep(1000);} catch (Exception e) {e.printStackTrace();}//调用获取数据方法,如果call()方法没有执行完成,则依然会进行等待System.out.println("数据:" + future.get());System.out.println("数据:" + future2.get());executor.shutdown();}}
这篇关于JAVA中的Future的简单用法(配合Callable)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!