`
hewei5894
  • 浏览: 9617 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

继承Callable接口从任务中产生返回值

阅读更多
Runnale是执行工作的独立任务,但是它不会返回任何值。 如果你希望任务在执行完成后能够返回一个值,那么可以实现Callable接口。

package threadpool;

import java.util.concurrent.Callable;
/**
 * 
 * @author hewei
 * 
 *         Runnable是执行工作的独立任务,但是它不返回任何值 实现Callable接口可以实现返回值
 */
public class TaskWithResult implements Callable<String> {
	private int id;

	public TaskWithResult(int id) {
		this.id = id;
	}

	@Override
	public String call() throws Exception {
		Thread.sleep(1000);
		return "报告老大 ...线程" + id+" 执行完毕";
	}

}

编写测试类:


package threadpool;

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 CallableDemo {
	public static void main(String[] args) {
		ExecutorService exec = Executors.newSingleThreadExecutor();
		ArrayList<Future<String>> results = new ArrayList<Future<String>>();
		for(int i=0;i<10;i++){
			results.add(exec.submit(new TaskWithResult(i)));
		}
		for(Future<String> fs : results){
			try {
				System.out.println(fs.get()); //fs.get() 为阻塞方法
			} catch (InterruptedException | ExecutionException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		exec.shutdown();
		exec.shutdownNow();
	}
}


分享到:
评论

相关推荐

    Java多线程之Callable接口的实现

    然而,在一些情况下,我们需要在多线程中返回结果或者抛出异常,这时就需要使用Callable接口。 Callable接口是Java 1.5中引入的新的接口,it提供了一个call()方法,该方法可以返回结果并抛出异常。Callable接口的...

    Java多线程实现Callable接口

    此外,Java 5引入了Callable接口,它提供了一种更灵活的方式来创建线程,特别是当需要从线程中返回结果时。 Callable接口类似于Runnable,但比Runnable更强大。Runnable接口的run()方法不能有返回值,而Callable的...

    MapReduce,泛型,匿名内部类,Runnable和Callable

    而Callable接口与Runnable类似,但它的call()方法可以返回一个结果,并能抛出异常,适合于需要返回值的异步计算。 当我们需要创建一个临时的任务或者对象仅在本地使用,而无需定义一个完整的类时,可以使用匿名内部...

    基于任务线程处理例子

    在Java中,`java.util.concurrent`包提供了`Future`和`Callable`接口来表示具有返回值的任务,而`Runnable`则用于无返回值的任务。 任务调度在多线程环境中至关重要,Java提供了多种任务调度工具。其中,`...

    并发编程 48 道面试题及答案.docx

    * Callable 的任务执行后可返回值,而 Runnable 的任务是不能返回值的。 * Call 方法可以抛出异常,run 方法不可以。 * 运行 Callable 任务可以拿到一个 Future 对象,表示异步计算的结果。 线程的状态流转图: ...

    CallableFuture简介-动力节点共16页.pd

    1. **Callable接口**:讲解Callable接口的基本概念,如何创建Callable对象,以及call()方法的使用。 2. **Future接口**:介绍Future接口的主要方法,如isDone()检查任务是否完成,cancel()尝试取消任务,get()获取...

    JAVA多线程实现的四种方式 - FelixZh - 博客园1

    Callable接口类似Runnable,但它可以返回一个结果并抛出异常。Future表示Callable任务的结果,可以用来检查任务是否完成、获取结果或取消任务。示例: ```java Future&lt;Integer&gt; future = executor.submit(new ...

    java并发编程78讲.pdf

    #### 四、Callable接口与有返回值的任务 除了实现`Runnable`接口和继承`Thread`类之外,还可以使用`Callable`接口来创建有返回值的任务。`Callable`接口类似于`Runnable`,但允许任务返回结果,并且可以抛出异常。 ...

    java.util.concurrent.uml.pdf

    而Callable接口类似于Runnable,但它可以有返回值,并能够抛出异常。 Future是一个接口,代表异步计算的结果。它提供了get方法,用于获取计算结果,以及cancel方法来取消任务,还有isDone和isCancelled等方法用于...

    拼多多Java高级工程师岗位面试真题

    3. **实现Callable接口**:创建Callable实例,通过FutureTask包装后传递给Thread构造器,Callable任务可以有返回值并可以抛出异常。 4. **使用线程池**:通过ExecutorService和ThreadPoolExecutor创建线程池,线程池...

    四种方式实现线程

    Thread类适合简单的线程需求,Runnable接口更灵活,Callable接口支持返回值,ExecutorService则提供了更高效的线程管理和资源调度。在实际开发中,应根据项目需求选择合适的方式创建线程。在提供的压缩包文件"Thread...

    Java多线程-JDK5.0新增线程创建方式

    将此Callable接口实现类的对象作为参数传递到FutureTask构造器中,创建FutureTask的对象 FutureTask&lt;Integer&gt; futureTask = new FutureTask(numThread); // 3. 将FutureTask的对象作为参数传递到Thread类的构造...

    多线程发邮件

    Callable接口定义了一个`call()`方法,类似于Runnable的`run()`方法,但是`call()`可以有返回值。在多线程环境中,我们可以通过`FutureTask`将Callable转换为Runnable,这样就可以在ExecutorService中执行。`...

    Java多线程三种主要实现方式解析

    在 Java 中,实现多线程有多种方式,本文将详细介绍 Java 中的三种主要实现方式:继承Thread类、实现Runnable接口和实现Callable接口。 继承Thread类 继承Thread类是Java中最基本的多线程实现方式。通过继承Thread...

    Java创建线程的三种方法比较及用法.doc

    在Java编程语言中,创建线程主要有三种方法:通过实现`Runnable`接口、通过实现`Callable`接口以及直接继承`Thread`类。这三种方法各有特点,适用于不同的场景。 1. **实现`Runnable`接口创建线程:** 这是最常见...

Global site tag (gtag.js) - Google Analytics