来,老规矩,在往下看答案之前,思考下,效果更佳
放个图片只是为了让你有个思考的缓冲
这道题,我们需要结合Future和Callable
来,上代码
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
// 定义一个实现了Callable接口的类,它代表一个可以返回结果的任务
class Task implements Callable<String> {
@Override
public String call() throws Exception { // 实现call()方法,该方法会在新线程中运行
// 这里是耗时的操作,例如计算或网络请求
Thread.sleep(2000); // 模拟耗时操作
return "任务执行完成的结果"; // 返回计算得出的结果
}
}
public class FutureAndCallableExample {
public static void main(String[] args) throws ExecutionException, InterruptedException {
// 创建一个固定大小的线程池(这里设置为单个线程)
ExecutorService executor = Executors.newFixedThreadPool(1);
// 创建Callable对象实例
Task task = new Task();
// 提交Callable任务到线程池中执行,并获取Future对象
Future<String> future = executor.submit(task); // 提交任务并获取Future
// 主线程继续执行其他逻辑,而不会阻塞等待任务完成
System.out.println("主线程正在执行其他任务...");
// 当需要任务的结果时,调用Future对象的get()方法来获取结果,此方法会阻塞直到结果可用
String result = future.get(); // 阻塞等待,直至获取到任务的执行结果
// 输出结果
System.out.println("从Callable任务得到的结果是:" + result);
// 关闭线程池
executor.shutdown();
}
}
搞定!如果内容对你有帮助,欢迎分享给好朋友!
也欢迎加入我的知识星球,更多进阶讲解干货!
长按识别二维码即可加入,敢承诺三天内免费试读,不满意可以直接退出!