`

JDK5.0新特性系列---11.1线程 Callable和Future

 
阅读更多

 

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
 
/**
    从本节开始,主要介绍J2SE5.0与线程相关的新特性,新的线程类主要集中在java.util.concurrent
包中,本节实例将介绍如何使用java.util.concurrent.Callable和java.util.concurrent.Future类,
用Callable定义一个任务并启动它,然后用它的Future获取输出结果并停止它.
关键技术剖析:
    关于Callable和Future类的关键技术如下:
    1.Callable是类似于Runnable的接口,实现Callable接口的类和实现Runable的类都是可被其他线程
执行的任务.
    2.Callable和Runnable的区别如下:
        1)Callable定义的方法是call,而Runnable定义的方法是run.
        2)Callable的call方法可以有返回值,而Runnable的run方法不能有返回值
        3)Callable的call方法可抛出异常,而Runnable的run方法不能抛出异常
    3.Future表示异步计算的结果,它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的
结果.Future的cancel方法取消任务的执行,有一个布尔参数,参数为true表示立即中断任务的执行,参数
为false表示允许正在运行的任务运行完成.Future的get方法等待计算完成,获取计算结果.
 */
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){
                            return "flag = 0";//如果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{
                            throw new Exception("Bad flag value!");//flag不为1或0,则抛出异常
                     }
              }
       }
       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.shutdown();//立即停止任务执行服务
       }
}
分享到:
评论

相关推荐

    JDK 5.0.zip

    7. **内建的并发工具类**:JDK 5.0引入了`java.util.concurrent`包,包含了许多线程安全的数据结构和并发工具,如`ExecutorService`、`Semaphore`、`Future`等,极大地简化了多线程编程。 8. **NIO.2(New I/O API...

    JDK5.0_下载-安装-配置

    JDK5.0是Oracle公司于2004年发布的一个重要版本,引入了许多新特性,对Java编程语言做了重大改进,提升了开发效率。要下载JDK5.0,首先访问Oracle的官方网站历史版本页面,或者通过互联网上的存档链接找到该版本的...

    jdk5.0新特性

    总结来说,JDK 5.0的新特性极大地提高了Java编程的效率和灵活性,通过自动装箱/拆箱、静态导入、增强的for循环以及可变长参数等功能,让开发者能够写出更加简洁、高效和易于维护的代码。这些改进不仅是对语言本身的...

    part 10 [浪曦][原创]JDK5.0新特性[风中叶老师主讲]共10 part

    [浪曦][原创]JDK5.0新特性[风中叶老师主讲]共10 part [浪曦][原创]JDK5.0新特性[风中叶老师主讲]共10 part

    JDK5.0新特性 常量 、枚举、 for each、反射

    在Java开发领域,JDK 5.0是一个重要的里程碑,引入了多项显著的新特性,极大地提升了编程效率和代码质量。本文将深入探讨其中的四个关键特性:常量、枚举、for each循环(也称为增强型for循环)以及反射。 首先,让...

    jdk-8u311-windows-x64.exe

    jdk-8u311-windows-x64.exe jdk-8u311-windows-x64.exe.zip jdk-8u311-windows-x64.exe jdk-8u311-windows-x64.exe.zip jdk-8u311-windows-x64.exe jdk-8u311-windows-x64.exe.zip jdk-8u311-windows-x64.exe jdk-8u...

    JDK5.0 新特性

    在JDK 5.0中,Java引入了一系列重要的新特性,极大地提升了开发效率和代码的可读性。这些新特性包括自动包装和解包、增强的for循环、可变参数方法、printf风格的格式化输出、枚举类型以及静态导入等。 首先,自动...

    part6 [浪曦][原创]JDK5.0新特性[风中叶老师主讲]共10 part

    [浪曦][原创]JDK5.0新特性[风中叶老师主讲]共10 part [浪曦][原创]JDK5.0新特性[风中叶老师主讲]共10 part

    浪曦 - JDK5.0新特性.part3

    浪曦 - JDK5.0新特性.part3

    浪曦 - JDK5.0新特性.part2

    浪曦 - JDK5.0新特性.part2

    part5 [浪曦][原创]JDK5.0新特性[风中叶老师主讲]共10 part

    [浪曦][原创]JDK5.0新特性[风中叶老师主讲]共10 part [浪曦][原创]JDK5.0新特性[风中叶老师主讲]共10 part

    JDK5.0新特性(3)——枚举

    在Java编程语言中,JDK 5.0的发布带来了一系列重要的新特性,极大地提升了开发效率和代码质量。其中,枚举(Enum)是引入的一个关键特性,它为表示固定集合中的常量提供了强大而安全的支持。这篇博客将深入探讨JDK ...

    浪曦 - JDK5.0新特性.part5.rar

    浪曦 - JDK5.0新特性.part5.rar

    jdk-8u172-windows-x64.exe、jdk-8u251-windows-x64.exe、jdk-14.0.1_windows-x64_bin.e

    本话题涉及三个不同版本的JDK:jdk-8u172-windows-x64.exe、jdk-8u251-windows-x64.exe以及jdk-14.0.1_windows-x64_bin.exe,分别对应Java 8的两个更新版本和Java 14的一个版本。 首先,让我们详细了解一下Java 8。...

    浪曦 - JDK5.0新特性.part4.rar

    浪曦 - JDK5.0新特性.part4.rar

    part3 [浪曦][原创]JDK5.0新特性[风中叶老师主讲

    [浪曦][原创]JDK5.0新特性[风中叶老师主讲[浪曦][原创]JDK5.0新特性[风中叶老师主讲[浪曦][原创]JDK5.0新特性[风中叶老师主讲

    part1 [浪曦][原创]JDK5.0新特性[风中叶老师主讲]

    [浪曦][原创]JDK5.0新特性[风中叶老师主讲][浪曦][原创]JDK5.0新特性[风中叶老师主讲][浪曦][原创]JDK5.0新特性[风中叶老师主讲]

    JDK5.0新特性 反射、枚举.rar

    在`JDK5.0新特性 (2)——反射.doc`中,你可能会学习到如何使用`java.lang.Class`对象来获取类信息,以及如何使用`java.lang.reflect`包中的`Constructor`、`Method`和`Field`类来操作类的构造器、方法和字段。...

    jdk5.0 tomcat5.0配置全攻略

    ### JDK 5.0 和 Tomcat 5.0 配置全攻略 #### 环境搭建背景 对于初入Java领域的新手来说,环境配置往往是一个不小的挑战。本篇文章旨在帮助那些在Java学习过程中遇到环境配置问题的朋友,提供一份详尽的JDK 5.0 和 ...

    jdk-8u171-windows

    jdk-8u171下载。 JDK介绍 JDK(Java Development Kit) 是 Java 语言的软件开发工具包(SDK)。 SE(J2SE),standard edition,标准版,是我们通常用的一个版本,从JDK 5.0开始,改名为Java SE。 EE(J2EE),enterprise ...

Global site tag (gtag.js) - Google Analytics