`

java.util.concurrent 之六:使用Future类和Callable类

    博客分类:
  • Java
阅读更多
    有时候在实际应用中,某些操作很耗时,但又不是不可或缺的步骤。比如用网页浏览器浏览新闻时,最重要的是显示文字内容,至于与新闻相匹配的图片就没有那么重要的,所以此时首先保证文字信息先显示,而图片信息会后显示,但又不能不显示,由于下载图片是一个耗时的操作,所以必须一开始就得下载。


Java的并发库的Future类就可以满足这个要求。Future的重要方法包括get()和cancel(),get()获取数据对象,如果数据没有加载,就会阻塞直到取到数据,而 cancel()是取消数据加载。另外一个get(timeout)操作,表示如果在timeout时间内没有取到就失败返回,而不再阻塞。

下面的Demo简单的说明了Future的使用方法:一个非常耗时的操作必须一开始启动,但又不能一直等待;其他重要的事情又必须做,等完成后,就可以做不重要的事情。
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 call = new Callable(){
			public String call() throws Exception{
				Thread.sleep(1000 * 5);
				return "Other less important but longtime things.";
			}
		};
		Future task = exec.submit(call);
		//重要的事情
		Thread.sleep(1000 * 3);
		System.out.println("Let's do important things.");
		//其他不重要的事情
		String obj = (String)task.get();
		System.out.println(obj);
		//关闭线程池
		exec.shutdown();
	}
}


运行结果:
Let's do important things.
Other less important but longtime things.




分享到:
评论
2 楼 DawnBells 2017-12-06  
1 楼 zxjlwt 2015-08-31  
学习了。

http://surenpi.com

相关推荐

    java.util.concurrent 学习ppt

    Java.util.concurrent的引入是为了解决传统并发原语如wait()、notify()、synchronized和volatile的使用难度大、容易出错以及性能问题。 在并发编程中,我们经常会遇到需要管理多个线程执行任务的情况。传统的做法是...

    java并发工具包 java.util.concurrent中文版pdf

    为了简化并发编程的复杂性,Java 5 引入了 `java.util.concurrent` 包,提供了一系列强大的类和接口,帮助开发者更高效地管理多线程任务。 #### 二、`java.util.concurrent` 概览 `java.util.concurrent` 包提供了...

    java.util.concurrent.uml.pdf

    标题中提到了“java.util.concurrent.uml.pdf”,这表明文件是一份Java并发编程工具包java.util.concurrent的UML(统一建模语言)类结构图的PDF格式文件。UML图能够帮助开发者理解Java并发包中的类、接口及其关系,...

    java.util.concurrent 测试源文件

    Java.util.concurrent(JUC)是Java平台中的一个核心包,专门用于处理多线程并发问题。这个包包含了大量的工具类和接口,极大地简化了并发编程的复杂性,提高了程序的性能和可伸缩性。本测试源文件主要是针对JUC并发...

    java并发工具包 java.util.concurrent中文版-带书签版

    3. **并发集合**:Java并发工具包提供了一系列线程安全的集合类,如`ConcurrentHashMap`、`CopyOnWriteArrayList`和`ConcurrentLinkedQueue`。这些集合类在多线程环境下可以避免同步锁的开销,提高性能。 4. **原子...

    java工具类

    11. **`java.util.concurrent`** 包:包含并发和多线程工具,如`ExecutorService`、`Future`和`Callable`。 12. **`java.util.logging.Logger`**:日志记录工具,用于输出程序运行时的信息。 13. **`java.lang....

    java.util.concurrent介绍(重要).pdf

    总之,`java.util.concurrent` 提供的工具使得并发编程变得更加容易和高效,是 Java 并发编程的基石,无论是对于初学者还是经验丰富的开发者,理解和掌握这个包都是非常重要的。通过熟练运用这些工具,开发者可以...

    java_util_concurrent_user_guide

    `java.util.concurrent`(JUC)包是Java标准库提供的一组强大的并发工具,它为开发者提供了丰富的类和接口,帮助简化并发编程。本用户指南将深入探讨这个包中的核心概念和主要类。 1. **线程池**: `java.util....

    常用的工具类大全

    8. **`java.util.concurrent` 包**: - 提供了高级并发工具,如线程池、并发集合、同步机制等,如 `ExecutorService`, `Future`, `Callable`, `Semaphore`, `CountDownLatch` 等。 9. **`java.util.logging.Logger...

    JAVA中Callable的使用

    要执行Callable任务,我们需要使用`ExecutorService`,它是`java.util.concurrent`包中的一个接口,用于管理和控制线程的执行。首先,我们创建一个ExecutorService实例,然后通过`submit()`方法提交Callable任务。`...

    基于线程池的Java多线程应用技术.pdf

    Java提供了三种方式用于创建线程,分别是继承java.lang.Thread类、实现java.lang.Runnable接口、应用java.util.concurrent.Callable接口与java.util.concurrent.Future接口。每种方式都有其优缺,需要根据实际工程...

    concurrent-1.3.4-sources.jar

    2. **java.util.concurrent** 包:这个包是Java并发库的核心,包含了许多并发和线程池相关的类,如ExecutorService、ThreadPoolExecutor、Future和Callable等。ExecutorService是线程池的接口,通过它可以管理和控制...

    java concurrent 包 详细解析

    6. **并发集合**:Java并发包提供了线程安全的集合,如`ConcurrentHashMap`(线程安全的哈希表)、`CopyOnWriteArrayList`(写时复制的列表)和`CopyOnWriteArraySet`(写时复制的集合),它们在多线程环境下性能更...

    backport-util-concurrent(2.2 /3.1)

    《backport-util-concurrent:Java并发编程的利器》 在Java的世界里,高效并发处理是提升应用程序性能的关键因素之一。backport-util-concurrent库,正如其名,是一种将Java 5及以上版本的并发特性“回移植”到Java...

    java各种常用的API

    - `java.util.concurrent`:包含高级并发工具,如Future、Callable、ThreadPoolExecutor。 6. **反射**: - `java.lang.reflect`:允许在运行时检查和操作类、接口、方法和构造器,增强了程序的动态性。 7. **...

    java工具类.zip

    `java.util.concurrent`包中包含许多线程相关的工具类,如ExecutorService、Future、Callable等,这些类和接口为并发编程提供了高效的支持,帮助开发者管理线程和任务执行。 5. **泛型**: 泛型是Java SE 5引入的...

    Android-Java并发工具类库

    这个名为“Xiaofei-it-Concurrent-Utils-829a450”的压缩包可能包含了一些优化和扩展了Java标准并发库(java.util.concurrent)的实用工具类。这里我们将深入探讨一些关于Java并发编程的关键知识点,并尝试理解这个...

    java 1.8 API 中文版

    3. **并发编程**:`java.util.concurrent`包提供了高效的并发工具,如ExecutorService、Future、Callable、ThreadLocal和各种并发集合(ConcurrentHashMap、CopyOnWriteArrayList等),以及锁和同步工具类。...

    Java并发编程学习笔记.

    3. **同步机制**:Java提供了多种同步机制,如`synchronized`关键字、`volatile`关键字、`Lock`接口(包括`ReentrantLock`可重入锁)和`java.util.concurrent`包下的工具类。这些机制用于解决多线程环境下的数据一致...

    [Java参考文档].JDK_API中文版

    6. **多线程**:Java内置对多线程的支持,`java.lang.Thread`类和`java.util.concurrent`包提供了创建和管理线程的工具,如`Runnable`接口,`ExecutorService`,`Future`和`Callable`等。 7. **网络编程**:`java...

Global site tag (gtag.js) - Google Analytics