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

Callable与Future的介绍

 
阅读更多

  Callable Future 两功能是Java在后续版本中为了适应多并法才加入的,Callable是类似于Runnable的接口,实现Callable接口的类和实现Runnable的类都是可被其他线程执行的任务。

Callable的接口定义如下;

public interface Callable<V> { 
      V   call()   throws Exception; 
} 

Callable和Runnable的区别如下:

I    Callable定义的方法是call,而Runnable定义的方法是run。

II   Callable的call方法可以有返回值,而Runnable的run方法不能有返回值。

III  Callable的call方法可抛出异常,而Runnable的run方法不能抛出异常。  

Future 介绍

Future表示异步计算的结果,它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果。Future的cancel方法可以取消任务的执行,它有一布尔参数,参数为 true 表示立即中断任务的执行,参数为 false 表示允许正在运行的任务运行完成。Future的 get 方法等待计算完成,获取计算结果

import java.util.concurrent.Callable;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

import java.util.concurrent.Future;

/**

 * Callable 和 Future接口

 * Callable是类似于Runnable的接口,实现Callable接口的类和实现Runnable的类都是可被其它线程执行的任务。

 * Callable和Runnable有几点不同:

 * (1)Callable规定的方法是call(),而Runnable规定的方法是run().

 * (2)Callable的任务执行后可返回值,而Runnable的任务是不能返回值的。

 * (3)call()方法可抛出异常,而run()方法是不能抛出异常的。

 * (4)运行Callable任务可拿到一个Future对象,

 * Future 表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果。

 * 通过Future对象可了解任务执行情况,可取消任务的执行,还可获取任务执行的结果。

 */

public class CallableAndFuture {
    public static class  MyCallable  implements Callable{
         private int flag = 0; 
         public MyCallable(int flag){
                  this.flag = flag;
          }
          public String call() throws Exception{
              if (this.flag == 0){  
                      return "flag = 0";
            } 

            if (this.flag == 1){   
                try {
                    while (true) {
                            System.out.println("looping.");
                            Thread.sleep(2000);
                    }
                } catch (InterruptedException e) {
                              System.out.println("Interrupted");
                }
                return "false";
            } else {   
                       throw new Exception("Bad flag value!");
            }
        }
    }

    public static void main(String[] args) {
       // 定义3个Callable类型的任务
        MyCallable task1 = new MyCallable(0);
       MyCallable task2 = new MyCallable(1);
       MyCallable task3 = new MyCallable(2);

         // 创建一个执行任务的服务
        ExecutorService es = Executors.newFixedThreadPool(3);
        try {
          // 提交并执行任务,任务启动时返回了一个Future对象,
            // 如果想得到任务执行的结果或者是异常可对这个Future对象进行操作
            Future future1 = es.submit(task1);
           // 获得第一个任务的结果,如果调用get方法,当前线程会等待任务执行完毕后才往下执行
            System.out.println("task1: " + future1.get());
            Future future2 = es.submit(task2);
           // 等待5秒后,再停止第二个任务。因为第二个任务进行的是无限循环
            Thread.sleep(5000);
            System.out.println("task2 cancel: " + future2.cancel(true));           
           // 获取第三个任务的输出,因为执行第三个任务会引起异常
            // 所以下面的语句将引起异常的抛出
            Future future3 = es.submit(task3);
            System.out.println("task3: " + future3.get());
        } catch (Exception e){
            System.out.println(e.toString());
        }
       // 停止任务执行服务
        es.shutdownNow();
    }

}

 

分享到:
评论

相关推荐

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

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

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

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

    Callable,Future的使用方式

    Callable,Future的使用方式,里面使用了三种使用方式分别是FutureTask,ExecutorService,ExecutorCompletionService

    Callable和Future.doc

    Callable 和 Future 是 Java 多线程编程中两个重要的接口,它们在处理异步计算和结果获取方面发挥着关键作用。Callable 与 Runnable 相似,但具有更强大的功能,允许任务返回结果并处理异常。 Callable 接口: ...

    Callable:Callable与Future在Web应用中的优化案例

    与Runnable接口不同,Callable可以有返回值,而且能够抛出异常。当我们需要在线程执行过程中获取某些计算结果时,Callable就非常适用。下面是一个简单的Callable示例: ```java public class MyTask implements ...

    java并发包之Callable和Future

    Future&lt;Integer&gt; future1 = threadPool.submit(new Callable() { public Integer call() throws Exception { return computeSomething1(); } }); Future&lt;Integer&gt; future2 = threadPool.submit(new Callable...

    总结了Thread-Callable-Future的小demo

    自留demo,主要是Thread-Callable-Future的基本实现。 参考文章: 1、深入理解Callable https://blog.csdn.net/qq_19431333/article/details/77483763 2、彻底理解Java的Future模式: ...

    Java多线程Callable和Future接口区别

    "Java多线程Callable和Future接口区别" Java多线程Callable和Future接口是Java语言中两个非常重要的接口,它们都是Java多线程编程中使用的接口,用于描述异步计算的结果。在JavaSE5中引入的Callable是一个具有类型...

    Java并发编程Callable与Future的应用实例代码

    在本文中,我们将详细介绍Callable与Future的应用实例代码,并探究它们在Java并发编程中的应用。 Callable Callable是一个接口,位于java.util.concurrent包中。它提供了一个call()方法,该方法会返回一个结果对象...

    Runnable、Callable、Future、FutureTask有什么关联.docx

    Runnable、Callable、Future、FutureTask有什么关联.docx

    Callable, Future, FutureTask2

    通过合规策略对服务器进行监控,确保服务器的运行、帐号在服务器上的操作符合预设的规则。日志:收集、整理服务器的日志信息,提供给管理员查看,并作为异常判断、故障排查的依据。进程:监控服务器上的进程,并对...

    java Callable与Future的详解及实例

    Callable 接口与 Runnable 相比,具有以下特点: 1. **方法不同**:Callable 接口中定义了 `call()` 方法,而 Runnable 接口中有 `run()` 方法。 2. **返回值**:Callable 的 `call()` 方法可以返回一个泛型结果 V,...

    详解JDK中ExecutorService与Callable和Future对线程的支持

    Java并发编程中的ExecutorService、Callable和Future Java并发编程中,ExecutorService、Callable和Future是三大核心组件,它们之间紧密相连,共同实现了高效、安全的并发编程。下面我们将详细介绍这些组件的作用和...

    【并发编程】 — 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 ...

    浅谈在Java中使用Callable、Future进行并行编程

    Callable接口与Runnable接口类似,但它具有一个泛型方法`call()`,该方法在执行时会返回一个结果,并可能抛出异常。Callable接口的定义如下: ```java public interface Callable&lt;V&gt; { V call() throws Exception;...

    java通过Callable和Future来接收线程池的执行结果

    Java通过Callable和Future来接收线程池的执行结果 Java中的线程池执行结果获取一直是一个棘手的问题,对于直接继承Thread的方式或实现Runnable接口的方式,都无法获取到线程执行的返回结果。如果线程在执行过程中...

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

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

    Java concurrency线程池之Callable和Future_动力节点Java学院整理

    今天,我们将详细介绍Java concurrency线程池之Callable和Future,这两个组件在Java并发编程中扮演着重要的角色。 Callable Callable是一个接口,它只包含一个call()方法。Callable是一个返回结果并且可能抛出异常...

    JAVA中Callable的使用

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

    java自定义任务类定时执行任务示例 callable和future接口使用方法

    `Callable`接口与`Runnable`接口类似,都是用来创建可由其他线程执行的任务。但`Callable`接口提供了几个关键区别: 1. **方法签名**:`Runnable`接口定义了`run()`方法,而`Callable`接口定义了`call()`方法。 2. ...

Global site tag (gtag.js) - Google Analytics