`
Icgemu
  • 浏览: 71584 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

在Java 线程中返回值的用法

    博客分类:
  • Java
阅读更多
有时在执行线程中需要在线程中返回一个值;常规中我们会用Runnable接口和Thread类设置一个变量;在run()中改变变量的值,再用一个get方法取得该值,但是run何时完成是未知的;我们需要一定的机制来保证。

在在Java se5有个Callable接口;我们可以用该接口来完成该功能;

代码如:
package com.threads.test;

import java.util.concurrent.Callable;

public class CallableThread implements Callable<String> {
	private String str;
	private int count=10;
	public CallableThread(String str){
		this.str=str;
	}
	//需要实现Callable的Call方法
	public String call() throws Exception {
		for(int i=0;i<this.count;i++){
			System.out.println(this.str+" "+i);
		}
		return this.str;
	}
}


在call方法中执行在run()方法中一样的任务,不同的是call()有返回值。
call的返回类型应该和Callable<T>的泛型类型一致。
测试代码如下:
package com.threads.test;

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 CallableTest {	
	public static void main(String[] args) {
		ExecutorService exs=Executors.newCachedThreadPool();
		ArrayList<Future<String>> al=new ArrayList<Future<String>>();
		for(int i=0;i<10;i++){
			al.add(exs.submit(new CallableThread("String "+i)));
		}
		
		for(Future<String> fs:al){
			try {
				System.out.println(fs.get());
			} catch (InterruptedException e) {
				e.printStackTrace();
			} catch (ExecutionException e) {
				e.printStackTrace();
			}
		}
	}

}


submit()方法返回一个Futrue对象,可以通过调用该对象的get方法取得返回值。
通过该方法就能很好的处理线程中返回值的问题。
分享到:
评论
3 楼 zifangsky 2015-12-10  
对于1楼的问题,这是因为程序执行了之后最后没有关闭线程池,最后加上:exs.shutdown();就好了
2 楼 靖玉王 2011-07-26  
谢谢了 ,我刚好要用:D 
1 楼 270861410 2010-12-30  
为什么在main都执行最后一个打印语句结束了,但是程序还要等好长时间才停止?是不是callable有问题?你注意到过吗?

相关推荐

    有返回值的线程

    在Java中,`Thread`类是用于创建新线程的基础类,但它的`run()`方法并不支持返回值。如果我们需要线程返回结果,可以使用`Callable`接口,它定义了一个`call()`方法,该方法可以返回一个`V`类型的值。下面是一个简单...

    使用Runnable模拟Callable接口实现线程有返回值

    大家都知道Runnable和Callable接口都可以作为其他线程执行的任务,但是Runnable接口的run方法没有返回值,而Callable接口的call方法有返回值,那么Callable接口是如何做到的呢?在此我给出一个Demo,看看通过...

    java线程实例 各种小Demo

    Java提供了wait()、notify()和notifyAll()方法进行线程间的通信,但这需要在同步控制块(synchronized)中使用。Java 5引入了BlockingQueue阻塞队列,提供了一种更安全的线程间通信方式,如ArrayBlockingQueue、...

    java线程文档大全

    Java线程是多任务编程中的核心概念,它允许程序同时执行多个不同的任务,极大地提高了程序的效率和响应性。在Java中,线程是通过Java.lang.Thread类或实现Runnable接口来创建和管理的。这份“java线程文档大全”包含...

    java多线程处理数据库数据

    在Java中,我们可以使用`Thread`类或者`Runnable`接口来创建线程。然而,为了更好地管理和控制线程,Java并发包提供了如`ExecutorService`、`Future`、`Callable`等高级接口和类,它们简化了多线程编程,并提供了更...

    java多线程编程总结

    该接口只有一个方法 `void run()` ,使用实现此接口的对象创建线程时,启动该线程会导致在独立执行的线程中调用对象的 `run` 方法。 - **实例化线程** 1. 如果是扩展 `java.lang.Thread` 类的线程,则可以直接使用 ...

    Java线程 学习

    ### Java线程学习知识点 #### 一、Java线程概览 - **定义与作用**:线程是在程序中独立且并发执行的路径。在Java中,线程被设计为语言的一部分,而不是作为操作系统的底层工具。每个Java程序至少包含一个主线程,在...

    Java线程实例

    Java线程是多任务编程的重要概念,特别是在Java这种支持并发执行的语言中。在Java中,线程被用来实现程序中的并行操作,使得一个应用程序可以同时执行多个不同的任务。线程允许程序在处理一个任务的同时,也能响应...

    Java多线程编程经验

    #### 十三、Java线程:新特征-有返回值的线程 Java 5 引入了 `java.util.concurrent` 包,提供了 `Callable` 和 `Future` 接口,允许线程执行后返回结果。 #### 十四、Java线程:新特征-锁(上) Java 5 还引入了...

    java线程的run()没有返回值怎么办?

    在给定的文件中,提到了使用`Callable`接口来处理`run()`方法无返回值的情况。`Callable`接口是在Java 5之后引入的,它与`Runnable`接口类似,但提供了有返回值的功能。`Callable`接口有一个泛型方法`call()`,这个...

    Java线程面试题Top50[参照].pdf

    Java 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速。 一、什么是线程? * 线程是操作系统...

    JAVA多线程教材

    4. **线程优先级与守护线程**:Java线程有优先级之分,可以影响调度,但实际效果取决于操作系统。守护线程(Daemon Thread)是一种特殊类型的线程,当它是系统中唯一运行的线程时,JVM会自动退出。 5. **并发集合与...

    Java多线程编程总结

    #### 十三、Java线程:新特征-有返回值的线程 - `Callable` 接口允许线程执行后返回结果,`Future` 接口用于获取这些结果。 #### 十四、Java线程:新特征-锁(上)&(下) - `java.util.concurrent.locks` 包提供...

    Java使用Callable和Future创建线程操作示例

    此外,Java中的线程创建方式还包括使用Runnable接口、Thread类、Executor框架等。不同的线程创建方式都有其优缺,需要根据实际情况选择合适的线程创建方式。 本文主要介绍了Java使用Callable和Future创建线程操作的...

    java多线程返回值使用示例(callable与futuretask)

    为了解决这个问题,Java提供了`Callable`接口和`FutureTask`类,它们是实现多线程返回值的关键工具。 `Callable`接口类似于`Runnable`,但比它功能更强大。`Callable`接口中的`call()`方法可以返回一个结果,并且...

    java线程学习笔记

    Java线程学习笔记涉及了Java多线程编程的多个关键知识点,本篇知识点整理将详细解释每个概念及其在Java中的实现方式。 基本知识部分包含了Java线程编程的基础内容,它们是并发编程的基石。 任务Runnable是一个接口...

    Java多线程结构_Java多线程结构_

    - wait(), notify(), notifyAll():这些方法在Object类中,用于线程间的通信,通常配合synchronized使用。 6. 线程状态: Java线程有五种状态:新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)...

    java 线程编程教程

    Java线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,从而提升系统效率和响应速度。在Java中,线程是程序执行的最小单位,由Java虚拟机(JVM)调度并执行。本教程将深入探讨Java线程的基础知识、...

Global site tag (gtag.js) - Google Analytics