Java线程返回值如何控制自己的未来

开发 后端
Java线程返回值有很多的问题需要我们解决,下面我们就看看如何才能更好的进行相关问题的解决。希望我们大家有所收获。

Java线程返回值在使用的时候有很多需要我们不断的学习的东西。下面我们就来看看相关的问题。使用ExecutorService、Callable、Future实现有返回结果的多线程,Executor、Service、Callable、Future这个对象实际上都是属于Executor框架中的功能类。#t#

这里面对该框架做了很详细的解释。返回结果的线程是在JDK1.5中引入的新特征,确实很实用,有了这种特征我就不需要再为了得到Java线程返回值而大费周折了,而且即便实现了也可能漏洞百出。

可Java线程返回值的任务必须实现Callable接口,类似的,无Java线程返回值的任务必须Runnable接口。执行Callable任务后,可以获取一个Future的对象,在该对象上调用get就可以获取到Callable任务返回的Object了,再结合线程池接口ExecutorService就可以实现传说中有返回结果的多线程了。下面提供了一个完整的有返回结果的多线程测试例子,在JDK1.5下验证过没问题可以直接使用。代码如下:

 

import java.util.concurrent.*;  
import java.util.Date;  
import java.util.List;  
import java.util.ArrayList;  
/**  
* Java线程:有返回值的线程  
*   
* @author wb_qiuquan.ying  
*/  
@SuppressWarnings("unchecked")  
public class Test {  
public static void main(String[] args) throws 
ExecutionException,  
InterruptedException {   System.out.println("----程序开始运行----");   Date date1 = new Date();   int taskSize = 5;   // 创建一个线程池   ExecutorService pool = Executors.newFixedThrea
dPool(taskSize);  
// 创建多个有返回值的任务   List<Future> list = new ArrayList<Future>();   for (int i = 0; i < taskSize; i++) {   Callable c = new MyCallable(i + " ");   // 执行任务并获取Future对象   Future f = pool.submit(c);   // System.out.println(">>>" + f.get().toString());   list.add(f);   }   // 关闭线程池   pool.shutdown();   // 获取所有并发任务的运行结果   for (Future f : list) {   // 从Future对象上获取任务的返回值,并输出到控制台   System.out.println(">>>" + f.get().toString());   }   Date date2 = new Date();   System.out.println("----程序结束运行----,程序运行时间【"   + (date2.getTime() - date1.getTime()) + "毫秒】");   }   }   class MyCallable implements Callable<Object> {   private String taskNum;   MyCallable(String taskNum) {   this.taskNum = taskNum;   }   public Object call() throws Exception {   System.out.println(">>>" + taskNum + "任务启动");   Date dateTmp1 = new Date();   Thread.sleep(1000);   Date dateTmp2 = new Date();   long time = dateTmp2.getTime() - dateTmp1.getTime();   System.out.println(">>>" + taskNum + "任务终止");   return taskNum + "任务返回运行结果,当前任务时间
【" + time + "毫秒】";  
}  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.

 

以上就是对Java线程返回值的介绍。

责任编辑:张浩 来源: 互联网
相关推荐

2023-08-07 14:52:33

WindowsExplorer进程

2022-07-06 07:08:58

CPythonPython返回值

2024-01-25 08:40:12

线程双异步Java8

2021-08-13 11:31:23

HTTP

2009-12-25 17:21:13

ADO返回值

2010-07-09 13:20:37

HART协议

2010-07-21 10:32:05

Perl函数返回值

2009-12-07 11:11:41

WCF返回值

2009-11-17 16:16:59

PHP递归函数

2009-09-07 03:07:11

C# Main方法

2021-08-06 14:35:26

鸿蒙HarmonyOS应用

2010-03-02 16:50:34

WCF返回值

2022-02-23 13:31:26

RVO编译器优化

2010-03-15 16:56:16

Java线程池

2010-03-15 19:56:46

Java线程

2024-01-24 11:35:28

C++多返回值开发

2021-12-19 23:58:51

Golang语言返回值

2010-07-07 16:53:50

UML顺序图

2011-07-19 17:33:53

存储过程javaibatis

2009-12-08 15:52:10

WCF回调
点赞
收藏

51CTO技术栈公众号