栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java线程(七):Callable和Future

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java线程(七):Callable和Future

下面来看另一种方式使用Callable和Future,通过ExecutorService的submit方法执行Callable,并返回Future,代码如下:

[java]  [view plain](() [copy](() [print](() [?](() [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1bArfsGD-1652074444137)(https://code.csdn.net/assets/CODE_ico.png)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8SGAzhTQ-1652074444137)(h 《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》无偿开源 威信搜索公众号【编程进阶路】 ttps://code.csdn.net/assets/ico_fork.svg)]

  1. public class CallableAndFuture {

  2. public static void main(String[] args) {

  3. ExecutorService threadPool = Executors.newSingleThreadExecutor();

  4. Future future = threadPool.submit(new Callable() {

  5. public Integer call() throws Exception {

  6. return new Random().nextInt(100);

  7. }

  8. });

  9. try {

  10. Thread.sleep(5000);// 可能做一些事情

  11. System.out.println(future.get());

  12. } catch (InterruptedException e) {

  13. e.printStackTrace();

  14. } catch (ExecutionException e) {

  15. e.printStackTrace();

  16. }

  17. }

  18. }

代码是不是简化了很多,ExecutorService继承自Executor,它的目的是为我们管理Thread对象,从而简化并发编程,Executor使我们无需显示的去管理线程的生命周期,是JDK 5之后启动任务的首选方式。

执行多个带返回值的任务,并取得多个返回值,代码如下:

[java]  [view plain](() [copy](() [print](() [?](() [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RdaiBZBc-1652074444138)(https://code.csdn.net/assets/CODE_ico.png)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dZPR9iTd-1652074444138)(https://code.csdn.net/assets/ico_fork.svg)]

  1. public class CallableAndFuture {

  2. public static void main(String[] args) {

  3. ExecutorService threadPool = Executors.newCachedThreadPool();

  4. CompletionService cs = new ExecutorCompletionService(threadPool);

  5. for(int i = 1; i < 5; i++) {

  6. final int taskID = i;

  7. cs.submit(new Callable() {

  8. public Integer call() throws Exception {

  9. return taskID;

  10. }

  11. });

  12. }

  13. // 可能做一些事情

  14. for(int i = 1; i < 5; i++) {

  15. try {

  16. System.out.println(cs.take().get());

  17. } catch (InterruptedException e) {

  18. e.printStackTrace();

  19. } catch (ExecutionException e) {

  20. e.printStackTrace();  
    .             } catch (ExecutionException e) {

  21. e.printStackTrace();

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/872672.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号