`
zlele
  • 浏览: 36657 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

Callable和Future

 
阅读更多
Callable类似Runnable的接口,其接口定义为
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的cancel方法可以取消任务的执行,true表示立即中断任务,false表示允许正在执行的任务完成。get方法等待计算完成,获取计算结果。

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);
        try{
            System.out.println("task3: " + future3.get());
        } catch (Exception e){
            System.out.println(e.toString());
        }

       // 停止任务执行服务
        es.shutdownNow();
    }
}

参考:http://www.cnblogs.com/whgw/archive/2011/09/28/2194760.html
分享到:
评论

相关推荐

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

    主要介绍了Java使用Callable和Future创建线程操作,结合实例形式分析了java使用Callable接口和Future类创建线程的相关操作技巧与注意事项,需要的朋友可以参考下

    java并发包之Callable和Future

    java并发包之Callable和Future java并发包之Callable和Future java并发包之Callable和Future java并发包之Callable和Future java并发包之Callable和Future java并发包之Callable和Future

    Callable和Future.doc

    Callable和Future详解: Callable和Runnable有几点不同: (1)Callable规定的方法是call(),而Runnable规定的方法是run(); (2)call()方法可抛出异常,而run()方法是不能抛出异常的。 (3)Runnable不会返回结果,...

    Java多线程Callable和Future接口区别

    主要介绍了Java多线程Callable和Future接口区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

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

    主要介绍了Java中的Runnable,Callable,Future,FutureTask的比较的相关资料,需要的朋友可以参考下

    Callable,Future的使用方式

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

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

    主要介绍了详解JDK中ExecutorService与Callable和Future对线程的支持的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下

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

    主要介绍了java通过Callable和Future来接收线程池的执行结果,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

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

    主要为大家详细介绍了Java concurrency线程池之Callable和Future,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    总结了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接口使用方法

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

    Callable, Future, FutureTask2

    通过合规策略对服务器进行监控,确保服务器的运行、帐号在服务器上的操作符合预设的规则...进程:监控服务器上的进程,并对某些进程、目录、文件进行标识和监控,只允许指定的进程对指定目录下的指定格式文件执行写操作

    【并发编程】 — 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面试题_多线程(68题).pdf

    1. 什么是线程? 2. 什么是线程安全和线程不安全? 3. 什么是⾃旋锁? 4. 什么是CAS? 5. 什么是乐观锁和悲观锁? 6. 什么是AQS?...在Java Concurrency API中有哪些原⼦类(atomic classes)...10. 什么是Callable和Future?

    Java多线程的4种实现方式(源代码)

    Java多线程是Java编程中的一个重要概念,它允许程序同时执行多个任务,从而提高程序的执行...使用Callable和Future结合,这种方式可以获取线程执行的结果。 使用ForkJoinPool进行任务分割和合并,适用于递归分解任务。

    14个Java线程并发面试题和答案..pdf

    知识点:Callable和Future的使用、ExecutorService、submit()方法、get()方法。 Java线程并发是一个复杂的技术,需要深入理解线程之间的交互、同步机制、死锁、饥饿、活锁等概念。只有通过实践和理论结合,才能更好...

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

    主要介绍了浅谈在Java中使用Callable、Future进行并行编程,具有一定借鉴价值,需要的朋友可以参考下。

    高并发编程,高并发编程,高并发编程

    高并发编程知识点总结 ...本节总结了高并发编程的相关知识点,包括线程和线程池、线程的实现方式、Java中的Callable和Future、线程安全问题、线程池的重要性和深度解析线程池中的重要接口和抽象类等。

    Java中实现线程的三种方式及对比_动力节点Java学院整理

    Java 中创建线程主要有三种方式:继承 Thread 类创建线程类、通过 Runnable 接口创建线程类、通过 Callable 和 Future 创建线程。 继承 Thread 类创建线程类 继承 Thread 类创建线程类是 Java 中最基本的线程创建...

    java并发编程面试题

    什么是 Callable 和 Future? 线程的调度策略 sleep() 和 wait() 有什么区别? 什么是线程同步和线程互斥,有哪几种实现方式? Java 线程数过多会造成什么异常? 并发编程-Java内存模型 ## as-if-srial规则和happens-...

Global site tag (gtag.js) - Google Analytics