两种方式:一种继承Thread类实现;一种通过实现Callable接口。

第一种方法:

因为实现Thread类的run方法自身是没有返回值的,所以不能直接获得线程的执行结果,但是可以通过在run方法里把最后的结果传递给实例变量,然后通过getXX方法获取该实例变量的值。继承实现的代码:

package com.dxz.thread;import java.util.Random;
import java.util.concurrent.TimeUnit;class RunThread extends Thread {private String runLog = "";private String name;public RunThread(String name) {this.name = name;}public void run() {try {int time = new Random().nextInt(10);System.out.println("sleep "+ time +" second.");TimeUnit.SECONDS.sleep(time);this.runLog = this.name + time;} catch (Exception e) {e.printStackTrace();}}public String getRunLog() {return this.runLog;}
}
package com.dxz.thread;
public class RunThreadTest {public static void main(String[] args) throws InterruptedException {RunThread runT = new RunThread("world");runT.start();runT.join();System.out.println("result:="+runT.getRunLog());}}

结果:

sleep 3 second.
result:=world3

结果2:

sleep 2 second.
result:=world2

第二种方法:

继承Callable接口后需要实现call方法,而call方法默认是可以有返回值的,所以可以直接返回想返回的内容。接口的实现代码:

package com.dxz.thread;import java.util.Random;
import java.util.concurrent.Callable;
import java.util.concurrent.TimeUnit;class CallThread implements Callable<String> {private String runLog = "";private String name;public CallThread(String name) {this.name = name;}@Overridepublic String call() throws Exception {try {int time = new Random().nextInt(10);System.out.println("sleep " + time + " second.");TimeUnit.SECONDS.sleep(time);this.runLog = this.name + time;} catch (Exception e) {e.printStackTrace();}return runLog;}
}

调用类:

package com.dxz.thread;import java.util.ArrayList;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;public class CallThreadTest {public static void main(String[] args) throws ExecutionException {String result = "";ExecutorService exs = Executors.newCachedThreadPool();ArrayList<Future<String>> al = new ArrayList<Future<String>>();al.add(exs.submit(new CallThread("hello")));al.add(exs.submit(new CallThread("world")));for (Future<String> fs : al) {try {result += fs.get() + ",";} catch (InterruptedException e) {e.printStackTrace();}}System.out.println("result:="+result);}}

结果:

sleep 5 second.
sleep 3 second.
result:=hello3,world5,

更多介绍见《Runnable、Callable、Future和FutureTask用法》

Thread之四:java线程返回结果的方法相关推荐

  1. 求一个简单的java线程代码,Java线程代码的实现方法

    1.继承Thread 声明Thread的子类 运行thread子类的方法 2.创建Thread的匿名子类 3.实现Runnable接口 声明 运行 4.创建实现Runnable接口的匿名类 5.线程名 ...

  2. 【 Thread】创建线程的2种方法

    (一)Thread类 1.结构 java.lang.Object |---java.lang.Thread 2.创建线程的两种方法 (1)一种方法是将类声明为Thread的子类,该子类应重写Threa ...

  3. 模拟做饭系统(java+线程中的join方法)

    (一)项目框架分析 妈妈要去做饭,发现没有酱油,让儿子去买酱油,然后回来做饭. 根据面向对象的思想,有两个对象,妈妈和儿子 主要有两个方法: (一)没有线程控制(即儿子没有买酱油回来妈妈就做好饭了)+ ...

  4. Java线程池的使用方法

    前言 多线程的异步执行方式,虽然能够最大限度发挥多核计算机的计算能力,但是如果不加控制,反而会对系统造成负担.线程本身也要占用内存空间,大量的线程会占用内存资源并且可能会导致Out of Memory ...

  5. 停止Java线程,小心interrupt()方法

    转自http://www.blogjava.net/jinfeng_wang/archive/2008/04/27/196477.html 程序是很简易的.然而,在编程人员面前,多线程呈现出了一组新的 ...

  6. TIL:创建Java线程的两种方法

    Java最强大的功能之一是它允许人们轻松管理线程以执行程序中的各种任务. 正确使用线程可以提高程序的效率. 也就是说,今天我了解了创建这些线程的两种方法: 第一种方法:实现可运行 Runnable是抽 ...

  7. 技术理论-【Thread】- java线程知识总结

    概念: 背景 程序,进程,线程,多任务,主线程 三高应用(高可用,高性能,高并发) 学习理论(守破离,断舍离), lambda(JDK8,内部类<静态,局部,匿名,lambda>,函数式编 ...

  8. 获取java线程中信息的方法

    多线程编程中的获取线程中的信息 1)将线程中要返回的结果存储在一个字段中,然后再提供一个获取方法将这个字段内容返回给盖饭发的调用者 public void ReturnThread extends T ...

  9. java怎么返回数组_java方法怎么返回数组

    java方法返回数组的方法:在方法前添加int[]即可返回一维的整型数组.如果在方法前添加int[][],则可以返回二维的整型数组. Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还 ...

最新文章

  1. C#显示相机实时画面
  2. sklearn快速入门教程:(一)准备工作
  3. BAT批量重命名文件擴展名
  4. 计算机网络应用教学反思,《计算机网络实训之常用的网络工具》教学反思
  5. Apache Camel框架之事务控制
  6. 不改代码也能全面 Serverless 化,阿里中间件如何破解这一难题?
  7. 特斯拉市值超过波音 成美国市值最高工业公司
  8. 有关视图状态(ViewState)的一些问题
  9. NLP学习01--BP神经网络
  10. vue对vue-giant-tree进行节点操作
  11. [数分提高]2014-2015-2第6教学周第1次课讲义 3.3 Taylor 公式
  12. excel文件导出进度条的实现
  13. 组建一个网络需要哪些网络设备和安全设备呢?
  14. 视觉中国的NoSQL之路:从MySQL到MongoDB
  15. 【Android开发日记】jsonObject = new JSONObject(info)报错 A JSONObject text must begin with '{' at character
  16. 苹果七绕过基带激活2020_【快讯:苹果135亿的基带订单,高通疑有诈直接拒绝了;网传索尼移动考虑退出东南亚手机市场;黑客成功获取iPhone XS 权限】...
  17. 计算机网络应用班级口号霸气押韵,大学班级口号霸气押韵.doc
  18. 象棋棋谱xqf工具包 v2.02 绿色
  19. ARM 嵌入式系统开发 - 软件设计与优化
  20. Unable to simultaneously satisfy constraints.这一问题

热门文章

  1. linux设备模型之tty驱动架构分析,linux设备模型之uart驱动架构分析
  2. python实现链表的删除_删除链表中的元素,但是只能使用一个指针
  3. query string parameter前端怎么传参_Substrate 前端开发-1: 用 Polkadot-JS API 轻松搭建前端
  4. android studio外接模拟器,Android Studio,使用外部模拟器作为生成app调试的模拟器
  5. python定义16进制数组,十六进制字符串到python中的字节数组
  6. layer 一些理解
  7. easyexcel 在 设置标题_EasyExcel 自定义单元格式的问题。
  8. python导入mat文件_python读取并写入mat文件的方法
  9. 关于项目404解决方法:前提条件:项目路径都是正确的
  10. android 渲染yuv数据,Android opengl渲染yuv420例子