`
zhaolei415
  • 浏览: 169297 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JDK1.5新特性--java.util.concurrent Future

阅读更多
有时候在实际应用中,某些操作很耗时,但又不是不可或缺的步骤。比如用网页浏览器浏览新闻时,最重要的是要显示文字内容,至于与新闻相匹配的图片就没有那么重要的,所以此时首先保证文字信息先显示,而图片信息会后显示,但又不能不显示,由于下载图片是一个耗时的操作,所以必须一开始就得下载。Java的并发库的Future类就可以满足这个要求。
Future模式可以这样来描述:我有一个任务,提交给了Future,Future替我完成这个任务。期间我自己可以去做任何想做的事情。一段时间之后,我就便可以从Future那儿取出结果。就相当于下了一张订货单,一段时间后可以拿着提订单来提货,这期间可以干别的任何事情。其中Future 接口就是订货单,真正处理订单的是Executor类,它根据Future接口的要求来生产产品。

Future接口提供方法来检测任务是否被执行完,等待任务执行完获得结果,也可以设置任务执行的超时时间。这个设置超时的方法就是实现Java程序执行超时的关键。

Future接口是一个泛型接口,严格的格式应该是Future<V>,其中V代表了Future执行的任务返回值的类型。 Future接口的方法介绍如下:

*boolean cancel (boolean mayInterruptIfRunning) 取消任务的执行。参数指定是否立即中断任务执行,或者等等任务结束
*boolean isCancelled () 任务是否已经取消,任务正常完成前将其取消,则返回 true
*boolean isDone () 任务是否已经完成。需要注意的是如果任务正常终止、异常或取消,都将返回true
*V get () throws InterruptedException, ExecutionException  等待任务执行结束,然后获得V类型的结果。InterruptedException 线程被中断异常, ExecutionException任务执行异常,如果任务被取消,还会抛出CancellationException
*V get (long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException 同上面的get功能一样,多了设置超时时间。参数timeout指定超时时间,uint指定时间的单位,在枚举类TimeUnit中有相关的定义。如果计算超时,将抛出TimeoutException
package concurrent;

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

public class TestFutureTask {
  public static void main(String[] args)throws InterruptedException,
      ExecutionException {
	    final ExecutorService exec = Executors.newFixedThreadPool(5);
	    Callable<String> call = new Callable<String>() {
	      public String call() throws Exception {
	        Thread.sleep(1000 * 3);
	        return "Other less important but longtime things.";
	      }
	    };
	    Future<String> task = exec.submit(call);
	    //重要的事情
	    Thread.sleep(1000 * 3);
	    System.out.println("Let's do important things.");
	    //不重要的事情
	    String obj = task.get();
	    System.out.println(obj);
	    //关闭线程池
	    exec.shutdown();
  }
}

分享到:
评论

相关推荐

    backport-util-concurrent(2.2 /3.1)

    backport-util-concurrent库,正如其名,是一种将Java 5及以上版本的并发特性“回移植”到Java 1.4及更早版本的工具,使得开发者能在较旧的Java环境中享受现代并发编程的优势。本文将深入探讨这个库的2.2和3.1两个...

    backport-util-concurrent-3.1.jar和geronimo-stax-api_1.0_spec-1.0.1.jar

    标题中的"backport-util-concurrent-3.1.jar"和"geronimo-stax-api_1.0_spec-1.0.1.jar"是两个Java库文件,它们在解决Eclipse Axis2 Codegen插件报错问题时起着关键作用。Axis2是一个流行的Web服务框架,而Codegen...

    JDK1.5新特性

    10. **线程并发库**:JDK 1.5加强了对多线程编程的支持,提供了`java.util.concurrent`包,包含如`ExecutorService`、`Future`、`Semaphore`等工具类,使得并发编程更加高效和安全。 11. **二进制表示(二进制 ...

    JDK1.5-1.6-1.7之新特性总结-1

    JDK 1.5增加了大量并发编程的工具类,如`java.util.concurrent`包下的`ExecutorService`、`Future`、`Semaphore`等,它们提供了更高效和安全的多线程处理方式。 **10. 遍历Map的键值对(For-Each Loop over Maps)*...

    jdk-api-1.8.CHM Java帮助手册中文版

    Java的并发编程模型在1.8中也得到了强化,`java.util.concurrent`包提供了许多高级的并发工具类,如`ExecutorService`、`Future`和`Callable`,以及线程池的管理。 **总结** Java JDK API 1.8 CHM中文版对于学习和...

    jdk1.5 java

    JDK 1.5引入了`java.util.concurrent`包,提供了线程安全的数据结构和并发编程工具,如`Executor`框架、`Future`接口、`Semaphore`、`CyclicBarrier`等,极大地简化了多线程编程。 ### 10. **Synchronized关键字...

    jdk1.5 windows 64位官方正式版,绝对有效

    对于并发编程,JDK1.5引入了java.util.concurrent包,其中包括了线程池、Future、Callable接口以及CyclicBarrier和Semaphore等同步工具类,极大地丰富了并发处理能力,提升了多线程环境下的性能和可维护性。...

    jdk1.5 64位 免安装

    在并发处理上,JDK1.5引入了并发工具类(java.util.concurrent),包括线程池(ExecutorService)、并发容器(如ConcurrentHashMap)以及Future接口等,这些工具极大地提高了多线程环境下的程序设计效率和性能。...

    jdk1.5.0.22 64位

    9. **并发编程改进**:包括`java.util.concurrent`包的引入,提供了线程池、Future、CyclicBarrier等高级并发工具,简化了多线程编程。 **安装过程** JDK 1.5.0.22的64位安装版文件名为`jdk-1_5_0_22-windows-amd...

    JDK1.6 API帮助文档.rar

    - **java.concurrent**:在JDK1.5引入,提供了并发控制、线程池、同步容器和并发集合等高级并发工具,如ExecutorService、Semaphore、Future、BlockingQueue等。 4. **反射与注解** - **java.lang.reflect**:...

    jdk1.7 api文档.chm

    - **java.util.concurrent**:并发编程的支持,包括`ExecutorService`、`Future`、`BlockingQueue`等,提高了多线程环境下的效率。 3. **I/O流**: - **java.io**:提供输入/输出流,支持文件操作、网络通信和...

    backport-util-concurrent_java_backport_源码.zip

    这个库使得开发者在不支持Java 5新特性的环境中也能使用高级的并发控制机制,极大地提升了多线程编程的效率和可靠性。本文将深入探讨backport-util-concurrent的源码,揭示其核心设计理念与实现原理。 首先,...

    jdk 1.6 API HTML Chinese

    - **java.util.concurrent**:提供高级并发工具类,如ExecutorService、Future、Semaphore等,方便多线程编程。 - **java.lang.Thread**:管理和控制线程的基本类,包括线程的创建、启动、同步和中断。 4. **反射...

    jdk----5windowsx64.zip

    9. **并发编程改进(Concurrency Enhancements)**:引入了`java.util.concurrent`包,包含了许多线程安全的数据结构和并发工具类,如`Executor`框架、`Future`接口以及`Semaphore`、`CyclicBarrier`等同步工具。...

    jdk1.5 线程并发与线程池的使用

    JDK 1.5引入了`java.util.concurrent`包,提供了许多高级并发工具,如`ExecutorService`、`Future`、`Callable`、`CyclicBarrier`、`Semaphore`等,大大简化了并发编程。 **线程池的概念** 线程池(ThreadPool)是...

    jdk1.5中文帮助文档

    Java 5.0引入了`java.util.concurrent`包,包含各种线程安全的数据结构和并发工具,如`ExecutorService`、`Semaphore`和`Future`,极大地方便了多线程编程。 9. **集合框架改进(Collections Framework ...

    JDK7-API-帮助文档(英文版).rar

    4. **多线程**:`java.lang.Thread`和`java.util.concurrent`包提供了多线程编程的支持,`java.util.concurrent`在JDK 7中进一步完善,增加了并发工具类,如`ExecutorService`和`Future`。 5. **异常处理**:`java....

    java jdk 1.5 API html

    `java.util.concurrent`包提供了丰富的并发工具类,如`ExecutorService`、`Future`、`Semaphore`、`CountDownLatch`等,帮助开发者更高效地编写多线程代码。 10. **NIO.2(New I/O 2)** 虽然Java 1.5主要引入的...

    jdk1.5.0_12.zip

    5. **集合框架增强**:包括`java.util.concurrent`包的引入,提供了线程安全的集合类和并发工具,如`ExecutorService`、`Future`和`Callable`接口,以及`ConcurrentHashMap`等。 6. **I/O和NIO改进**:Java 1.5引入...

Global site tag (gtag.js) - Google Analytics