`

callable和future

    博客分类:
  • java
 
阅读更多
    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 {     
        
        /** */ /**    
         * 自定义一个任务类,实现Callable接口    
         */     
        public   static   class  MyCallableClass  implements  Callable{     
            // 标志位      
            private   int  flag =  0 ;     
            public  MyCallableClass( int  flag){     
                this .flag = flag;     
            }     
            public  String call()  throws  Exception{     
                if  ( this .flag ==  0 ){     
                    // 如果flag的值为0,则立即返回      
                    return   "flag = 0" ;     
                }      
                if  ( this .flag ==  1 ){     
                    // 如果flag的值为1,做一个无限循环      
                    try  {     
                        while  ( true ) {     
                            System.out.println("looping." );     
                            Thread.sleep(2000 );     
                        }     
                    } catch  (InterruptedException e) {     
                        System.out.println("Interrupted" );     
                    }     
                    return   "false" ;     
                } else  {     
                    // falg不为0或者1,则抛出异常      
                    throw   new  Exception( "Bad flag value!" );     
                }     
            }     
        }     
             
        public   static   void  main(String[] args) {     
            // 定义3个Callable类型的任务      
            MyCallableClass task1 = new  MyCallableClass( 0 );     
            MyCallableClass task2 = new  MyCallableClass( 1 );     
            MyCallableClass task3 = new  MyCallableClass( 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提供了...

    Callable和Future.doc

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

    Java多线程Callable和Future接口区别

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

    java并发包之Callable和Future

    `Callable`和`Future`的组合是Java并发包中一个强大的工具,它弥补了`Runnable`接口的不足,使得异步编程可以获取到返回值并处理异常。同时,`ExecutorService`作为线程池的实现,为并发编程提供了一种优雅的解决...

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

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

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

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

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

    Java中的Runnable、Callable、Future和FutureTask是Java多线程编程中的核心概念,它们各自扮演着不同的角色,共同协作以实现并发任务的管理和执行。 1. **Runnable**: Runnable是最基本的多线程接口,它只有一个`...

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

    Java concurrency线程池之Callable和Future Java concurrency是一个重要的概念,在Java编程中,线程池是一个关键组件。今天,我们将详细介绍Java concurrency线程池之Callable和Future,这两个组件在Java并发编程中...

    Callable,Future的使用方式

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

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

    在Java编程中,Callable接口和Future接口是多线程编程中的重要工具,它们在Web应用程序的性能优化中扮演着关键角色。本篇文章将深入探讨Callable和Future如何在Web应用中提高效率并优化资源利用。 Callable接口是...

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

    从Java 1.5开始,引入了Callable和Future接口,为并行编程提供了一种更为高效和便捷的解决方案。 Callable接口是Java并发库中的一个关键接口,位于`java.util.concurrent`包下。Callable接口与Runnable接口类似,但...

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

    在Java多线程编程中,`Callable`接口和`Future`接口是两个重要的组件,它们提供了比`Runnable`接口更强大的功能,尤其是在处理异步计算和结果获取时。本文将详细介绍这两个接口以及如何使用它们来创建自定义任务类以...

    java Callable与Future的详解及实例

    Callable 和 Future 是 Java 多线程编程中的两个关键接口,它们在 Java 5 及以上版本引入,以增强并发处理的能力。Callable 接口类似 Runnable,但提供了更丰富的功能,而 Future 对象则用于管理和控制异步计算的...

    总结了Thread-Callable-Future的小demo

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

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

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

    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 Callable接口实现多线程的方式

    Callable接口和Future接口的组合使用,能够实现多线程并发执行任务,并获取执行结果。 一、Callable接口简介 Callable接口是一个泛型接口,用于表示可以调用并返回结果的代码。它提供了一个call()方法,该方法...

    Java特别篇-关于线程创建的三种方式的总结对比

    ### Java特别篇-关于线程创建的三种方式的总结对比 ... - **使用Callable和Future接口**:这种方式支持返回结果和抛出异常,适合需要计算结果的场景。相对前两种方式更为复杂,但在某些场景下非常有用。

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

    然后,我们使用Callable来定义查评论列表和查点赞列表的任务,并将其提交给线程池。最后,我们使用Future来获取Callable任务的返回值。 异步化改造接口 在上面的代码中,我们可以看到异步化改造接口的实现。我们...

Global site tag (gtag.js) - Google Analytics