获取Java线程返回值的几种方式
在实际开发过程中,我们有时候会遇到主线程调用子线程,要等待子线程返回的结果来进行下一步动作的业务。
那么怎么获取子线程返回的值呢,我这里总结了三种方式:
- 主线程等待。
- Join方法等待。
- 实现Callable接口。
Entity类
package com.basic.thread; /**
* @author zhangxingrui
* @create 2019-02-17 22:14
**/
public class Entity { private String name; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
}
主线程等待(这个一看代码便知晓,没什么问题)
public static void main(String[] args) throws InterruptedException {
Entity entity = new Entity();
Thread thread = new Thread(new MyRunnable(entity));
thread.start();
// 获取子线程的返回值:主线程等待法
while (entity.getName() == null){
Thread.sleep(1000);
}
System.out.println(entity.getName());
}
Join方法阻塞当前线程以等待子线程执行完毕
public static void main(String[] args) throws InterruptedException {
Entity entity = new Entity();
Thread thread = new Thread(new MyRunnable(entity));
thread.start();
// 获取子线程的返回值:Thread的join方法来阻塞主线程,直到子线程返回
thread.join();
System.out.println(entity.getName());
}
通过实现Callable接口
这里又分为两种情况,通过FutureTask或线程池。
FutureTask
@SuppressWarnings("all")
public static void main(String[] args) throws ExecutionException, InterruptedException {
FutureTask futureTask = new FutureTask(new MyCallable());
Thread thread = new Thread(futureTask);
thread.start();
if(!futureTask.isDone())
System.out.println("task has not finished!");
System.out.println(futureTask.get());
}
线程池
@SuppressWarnings("all")
public static void main(String[] args) throws ExecutionException, InterruptedException {
ExecutorService executorService = Executors.newCachedThreadPool();
Future future = executorService.submit(new MyCallable());
if(!future.isDone())
System.out.println("task has not finished!");
System.out.println(future.get());
}
获取Java线程返回值的几种方式的更多相关文章
- WebService,ASMX文件使用XML格式数据传递参数、验证与获取XML格式返回值的一种方式
1:首先WebService方法定义,每个方法定义两个参数,一个用于验证权限,string格式的XML文本用于传输数据.最终目的实现,WebService方法,验证权限,获取XML数据,处理之后返回X ...
- python执行系统命令后获取返回值的几种方式集合
python执行系统命令后获取返回值的几种方式集合 今天小编就为大家分享一篇python执行系统命令后获取返回值的几种方式集合,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 第一种情 ...
- ARTS-S 获取子线程返回值注意事项
#include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <unistd.h& ...
- Java线程实现的第三种方式Callable方式与结合Future获取返回值
多线程的实现方式有实现Runnable接口和继承Thread类(实际上Thread类也实现了Runnable接口),但是Runnable接口的方式有两个弊端,第一个是不能获取返回结果,第二个是不能抛出 ...
- net异步线程获取返回值的三种方式
方式一:endInvoke using System; using System.Collections.Generic; using System.Text; using System.Thread ...
- Python建立多线程任务并获取每个线程返回值
1.进程和线程 (1)进程是一个执行中的程序.每个进程都拥有自己的地址空间.内存.数据栈以及其他用于跟踪执行的辅助数据.进程也可以派生新的进程来执行其他任务,不过每个新进程都拥有自己的内存和数据栈,所 ...
- java ajax返回 Json 的 几种方式
原文:https://blog.csdn.net/qq_26289533/article/details/78749057 方式 1. : 自写代码转 Json 需要 HttpHttpServlet ...
- 十、获取异步线程返回值Callable
一.简介 异步线程的实现接口Runnable是无法获得返回结果的,而另一个接口Callable可以返回结果.并通过如Future等方式来获取异步结果. 二.代码示例 import java.util. ...
- java 线程返回值
1.传统方式需要新建一个接口类,然后在接口类中将结果在方法中作为参数进行处理 package de.bvb.test3; public class Test3 { public static void ...
随机推荐
- UICollectionViewFlowLayout 的 estimatedItemSize 属性
这个是collectionView的item 自适应fram的属性, 介绍在网上很多, 但是用法没有太多的举例, 其实这个属性的使用也很简单, 随便给它的不为CGSizeZero的值就好, 但是, 但 ...
- 使用Consul做服务发现的若干姿势
从2016年起就开始接触Consul,使用的主要目的就是做服务发现,后来逐步应用于生产环境,并总结了少许使用经验.最开始使用Consul的人不多,为了方便交流创建了一个QQ群,这两年微服务越来越火,使 ...
- Android AIDL浅析及异步使用
AIDL:Android Interface Definition Language,即 Android 接口定义语言. AIDL 是什么 Android 系统中的进程之间不能共享内存,因此,需要提供 ...
- Docker permission denied
Issue: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/ ...
- android学习:Android上面部署Apache FTPServer
经过了几天的研究,终于Apache FTPServer在Android的配置和使用上有了一些心得,现在分享出来,提供给大家参考,说到这儿又不得不吐槽一下这要命的转载了,找Apache FTPServe ...
- Xcode 提交APP时遇到 “has one iOS Distribution certificate but its private key is not installed”
解决办法:登录Apple开发证书后台,把发布版证书.cer文件下载到本地,双击安装即可.若还没有设置发布证书文件,则创建一个后下载. Ref: https://blog.csdn.net/dingqk ...
- [iOS]UIInterpolatingMotionEffect重力视觉差
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typica ...
- Java常用类归纳(Object、System、Properties、包装类和工具类等等)
Object类 Object 是类层次结构的根类.每个类都使用 Object 作为超类,所有对象(包括数组)都实现这个类的方法.了解Object的方法是很有必要的. protected Object ...
- 蓝桥杯第七届决赛(国赛)C++B组 第四题 机器人塔
机器人塔 X星球的机器人表演拉拉队有两种服装,A和B.他们这次表演的是搭机器人塔. 类似: A B B A B A A A B B B B B A BA B A B B A 队内的组塔规则 ...
- 三、spring成长之路——springIOC容器详解(上)
目录 一.springIOC 一.springIOC 控制反转和依赖注入: 简单的说就是将对象的创建,属性的的设置交给spring容器进行管理,而不再由用户自己创建,当用户需要使用该接口或者类的时 ...