`

Callable 与 Runnable 的区别

阅读更多

转自:http://blog.sina.com.cn/s/blog_4c2e288b01000ark.html

 

Callable 接口类似于 Runnable ,两者都是为那些其实例可能被另一个线程执行的类设计的。但是 Runnable 不会返回结果,并且无法抛出经过检查的异常。

 
用下面的例子说明他们彼此的实现的不同:
 
 类构造:
 public class RunnableClass implements Runnable{
 
   public void run(){
 
 
   }
 }
 public class CallableClass implements Callable{
    public V call() throws Exception{
 
       return V
    }
 
 }
 类调用:
 
 Thread runnable=new Thread(RunnableClass);
 runnable.start();
 
 Callable<int[]> callable=new callableClass();
 FutureTask<int[]> future=new FutureTask(int[])(callable);
 Thread t=new Thread(future);
 t.start();
 if(future.isDone()){
    int[] intValue=future.get();
 }
 代码说明:
 FutureTask 属于代理类 ,负责启动Callable对象,并且可以通过它来获得Callable 的返回信息。

 

再举一个例子,如下代码:

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 *  Runnable是执行工作的独立任务,但是它不返回任何值, 
 *  如果希望任务在完成时能够返回一个值,可以实现Callable接口
 */
public class PrimeThread {

    public static void main(String[] args) throws Exception {
        ExecutorService service = Executors.newCachedThreadPool();
        System.out.println("==" + service.submit(new TaskResult(66)).get().toString());
    }
}

class TaskResult implements Callable<String> {

    private int id;

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

    public String call() throws Exception {
        return "result of TaskWithResult " + id;
    }
}
分享到:
评论

相关推荐

    Android(Java)之多线程结果返回——Future 、FutureTask、Callable、Runnable

    `Future`、`FutureTask`、`Callable`和`Runnable`是Java并发编程中的核心接口和类,它们在Android开发中同样有着广泛的应用。下面将详细介绍这些概念以及它们如何协同工作。 1. `Runnable`: 这是Java中最基础的多...

    Java中的Runnable,Callable,Future,FutureTask的比较

    在实际开发中,ExecutorService(如ThreadPoolExecutor)经常与Future和FutureTask一起使用,因为ExecutorService可以提交Runnable或Callable任务,并返回Future,从而实现对任务的异步处理和结果获取。例如: ```...

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

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

    Java 线程对比(Thread,Runnable,Callable)实例详解

    Callable接口与Runnable类似,但其call()方法可以返回一个值并抛出异常。通过FutureTask包装Callable,可以将其转换为Runnable,然后创建线程。例如: ```java public class MyCallable implements Callable...

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

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

    Java中的Callable接口最全讲义

    目录: 简介 Callable接口的基本用法 2.1 创建Callable任务 2.2 提交Callable任务 2.3 获取任务执行结果 ...Callable与Runnable的对比 Callable的异常处理 Callable的应用场景 最佳实践与注意事项

    Callable接口源码阅读1

    例如,可以使用`Executors.callable(Runnable task, V result)`将一个Runnable转换为Callable,这样Runnable的任务就可以返回一个结果。 7. **应用场景** Callable常用于FutureTask或者ExecutorService中。...

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

    Java使用Callable和Future创建线程操作示例主要介绍了Java使用Callable和Future创建线程操作,结合实例形式分析了java使用Callable接口和Future类创建线程的相关操作技巧与注意事项。 首先,Java 5开始,Java提供了...

    JAVA中Callable的使用

    与Runnable接口相比,Callable接口提供了更强大的功能,因为Runnable只能定义无返回值的任务,而Callable可以定义有返回值的任务。这篇教程将深入探讨如何在Java中使用Callable。 Callable接口位于`java.util....

    创建线程的三种方式(Thread、Runnable、Callable).docx

    在Java编程中,创建线程主要有三种方式:继承Thread类、实现Runnable接口以及实现Callable接口。下面我们将逐一探讨这些方式的细节。 **方式一:继承Thread类实现多线程** 这种方式是最直观的创建线程的方法。首先...

    【并发编程】 — Runnable、Callable、Future和FutureTask之间的关系

    2 如何使用FutureTask 、Future、Callable、线程池实现线程2.1 FutureTask + Callable实现多线程2.2 线程池+Future+Callable 实现多线程3 Runnable、Callable、Future和FutureTask之间的关系3.1 整体关系介绍3.2 ...

    面向小白学习法——Thread和Runnable,扩展Callable!

    面试中,理解`Thread`和`Runnable`的区别很重要。`Thread`适合需要直接继承的场景,而`Runnable`更适合多态和资源共享。`Callable`则在需要从线程获取返回值的情况下更为适用。掌握这些基础,能帮助你在实际编程中更...

    Callable和Future.doc

    Callable 与 Runnable 相似,但具有更强大的功能,允许任务返回结果并处理异常。 Callable 接口: Callable 接口中定义了 `call()` 方法,与 Runnable 的 `run()` 方法不同。`call()` 方法可以抛出受检异常...

    java callable(多线程)

    `Callable`接口与我们熟知的`Runnable`接口相似,但功能更加强大,主要体现在以下几个方面: 1. **方法签名的不同**:`Callable`接口包含一个`call()`方法,而`Runnable`接口则包含一个`run()`方法。`call()`方法...

    【Java】Callable创建线程用到的适配器模式(csdn)————程序.pdf

    首先,Callable接口与Runnable接口类似,都是用于创建新线程的接口。但是,Runnable接口的run()方法无返回值,而Callable的call()方法可以返回一个结果,并且允许在计算过程中抛出异常。在上述示例中,`MyThread`类...

    Java多线程Callable和Future接口区别

    这是Callable和Runnable接口最大的区别。 Future接口是Java多线程编程中用于描述异步计算的结果的接口。它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果。通过Future对象可了解任务执行情况,...

    详解Java Callable接口实现多线程的方式

    四、Callable与Runnable的区别 Callable接口和Runnable接口都是用于多线程的接口,但是它们有所不同。Runnable接口没有返回值,而Callable接口可以返回执行结果。Runnable接口的run()方法返回void类型,而Callable...

    Android代码-jdeferred

    Callable and Runnable wrappers .when(new Runnable() {…}) Uses Executor Service Java Generics support Deferred deferred; deferred.resolve(10); deferred.reject(new Exception()); deferred.notify(0.80)...

Global site tag (gtag.js) - Google Analytics