获取Java线程返回值的几种方式
2019-02-21 06:39:22来源:博客园 阅读 ()
在实际开发过程中,我们有时候会遇到主线程调用子线程,要等待子线程返回的结果来进行下一步动作的业务。
那么怎么获取子线程返回的值呢,我这里总结了三种方式:
- 主线程等待。
- Join方法等待。
- 实现Callable接口。
Entity类
1 package com.basic.thread; 2 3 /** 4 * @author zhangxingrui 5 * @create 2019-02-17 22:14 6 **/ 7 public class Entity { 8 9 private String name; 10 11 public String getName() { 12 return name; 13 } 14 15 public void setName(String name) { 16 this.name = name; 17 } 18 }
主线程等待(这个一看代码便知晓,没什么问题)
1 public static void main(String[] args) throws InterruptedException { 2 Entity entity = new Entity(); 3 Thread thread = new Thread(new MyRunnable(entity)); 4 thread.start(); 5 // 获取子线程的返回值:主线程等待法 6 while (entity.getName() == null){ 7 Thread.sleep(1000); 8 } 9 System.out.println(entity.getName()); 10 }
Join方法阻塞当前线程以等待子线程执行完毕
1 public static void main(String[] args) throws InterruptedException { 2 Entity entity = new Entity(); 3 Thread thread = new Thread(new MyRunnable(entity)); 4 thread.start(); 5 // 获取子线程的返回值:Thread的join方法来阻塞主线程,直到子线程返回 6 thread.join(); 7 System.out.println(entity.getName()); 8 }
通过实现Callable接口
这里又分为两种情况,通过FutureTask或线程池。
FutureTask
1 @SuppressWarnings("all") 2 public static void main(String[] args) throws ExecutionException, InterruptedException { 3 FutureTask futureTask = new FutureTask(new MyCallable()); 4 Thread thread = new Thread(futureTask); 5 thread.start(); 6 if(!futureTask.isDone()) 7 System.out.println("task has not finished!"); 8 System.out.println(futureTask.get()); 9 }
线程池
1 @SuppressWarnings("all") 2 public static void main(String[] args) throws ExecutionException, InterruptedException { 3 ExecutorService executorService = Executors.newCachedThreadPool(); 4 Future future = executorService.submit(new MyCallable()); 5 if(!future.isDone()) 6 System.out.println("task has not finished!"); 7 System.out.println(future.get()); 8 }
原文链接:https://www.cnblogs.com/alinainai/p/10409540.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:单点登录原理与简单实现
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- 2020年深圳中国平安各部门Java中级面试真题合集(附答案) 2020-06-11
- 2020年java就业前景 2020-06-11
- 04.Java基础语法 2020-06-11
- Java--反射(框架设计的灵魂)案例 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash