有时候在实际应用中,某些操作很耗时,但又不是不可或缺的步骤。比如用网页浏览器浏览新闻时,最重要的是显示文字内容,至于与新闻相匹配的图片就没有那么重要的,所以此时首先保证文字信息先显示,而图片信息会后显示,但又不能不显示,由于下载图片是一个耗时的操作,所以必须一开始就得下载。
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.
分享到:
相关推荐
Java.util.concurrent的引入是为了解决传统并发原语如wait()、notify()、synchronized和volatile的使用难度大、容易出错以及性能问题。 在并发编程中,我们经常会遇到需要管理多个线程执行任务的情况。传统的做法是...
为了简化并发编程的复杂性,Java 5 引入了 `java.util.concurrent` 包,提供了一系列强大的类和接口,帮助开发者更高效地管理多线程任务。 #### 二、`java.util.concurrent` 概览 `java.util.concurrent` 包提供了...
标题中提到了“java.util.concurrent.uml.pdf”,这表明文件是一份Java并发编程工具包java.util.concurrent的UML(统一建模语言)类结构图的PDF格式文件。UML图能够帮助开发者理解Java并发包中的类、接口及其关系,...
Java.util.concurrent(JUC)是Java平台中的一个核心包,专门用于处理多线程并发问题。这个包包含了大量的工具类和接口,极大地简化了并发编程的复杂性,提高了程序的性能和可伸缩性。本测试源文件主要是针对JUC并发...
3. **并发集合**:Java并发工具包提供了一系列线程安全的集合类,如`ConcurrentHashMap`、`CopyOnWriteArrayList`和`ConcurrentLinkedQueue`。这些集合类在多线程环境下可以避免同步锁的开销,提高性能。 4. **原子...
11. **`java.util.concurrent`** 包:包含并发和多线程工具,如`ExecutorService`、`Future`和`Callable`。 12. **`java.util.logging.Logger`**:日志记录工具,用于输出程序运行时的信息。 13. **`java.lang....
总之,`java.util.concurrent` 提供的工具使得并发编程变得更加容易和高效,是 Java 并发编程的基石,无论是对于初学者还是经验丰富的开发者,理解和掌握这个包都是非常重要的。通过熟练运用这些工具,开发者可以...
`java.util.concurrent`(JUC)包是Java标准库提供的一组强大的并发工具,它为开发者提供了丰富的类和接口,帮助简化并发编程。本用户指南将深入探讨这个包中的核心概念和主要类。 1. **线程池**: `java.util....
8. **`java.util.concurrent` 包**: - 提供了高级并发工具,如线程池、并发集合、同步机制等,如 `ExecutorService`, `Future`, `Callable`, `Semaphore`, `CountDownLatch` 等。 9. **`java.util.logging.Logger...
要执行Callable任务,我们需要使用`ExecutorService`,它是`java.util.concurrent`包中的一个接口,用于管理和控制线程的执行。首先,我们创建一个ExecutorService实例,然后通过`submit()`方法提交Callable任务。`...
Java提供了三种方式用于创建线程,分别是继承java.lang.Thread类、实现java.lang.Runnable接口、应用java.util.concurrent.Callable接口与java.util.concurrent.Future接口。每种方式都有其优缺,需要根据实际工程...
2. **java.util.concurrent** 包:这个包是Java并发库的核心,包含了许多并发和线程池相关的类,如ExecutorService、ThreadPoolExecutor、Future和Callable等。ExecutorService是线程池的接口,通过它可以管理和控制...
6. **并发集合**:Java并发包提供了线程安全的集合,如`ConcurrentHashMap`(线程安全的哈希表)、`CopyOnWriteArrayList`(写时复制的列表)和`CopyOnWriteArraySet`(写时复制的集合),它们在多线程环境下性能更...
《backport-util-concurrent:Java并发编程的利器》 在Java的世界里,高效并发处理是提升应用程序性能的关键因素之一。backport-util-concurrent库,正如其名,是一种将Java 5及以上版本的并发特性“回移植”到Java...
- `java.util.concurrent`:包含高级并发工具,如Future、Callable、ThreadPoolExecutor。 6. **反射**: - `java.lang.reflect`:允许在运行时检查和操作类、接口、方法和构造器,增强了程序的动态性。 7. **...
`java.util.concurrent`包中包含许多线程相关的工具类,如ExecutorService、Future、Callable等,这些类和接口为并发编程提供了高效的支持,帮助开发者管理线程和任务执行。 5. **泛型**: 泛型是Java SE 5引入的...
这个名为“Xiaofei-it-Concurrent-Utils-829a450”的压缩包可能包含了一些优化和扩展了Java标准并发库(java.util.concurrent)的实用工具类。这里我们将深入探讨一些关于Java并发编程的关键知识点,并尝试理解这个...
3. **并发编程**:`java.util.concurrent`包提供了高效的并发工具,如ExecutorService、Future、Callable、ThreadLocal和各种并发集合(ConcurrentHashMap、CopyOnWriteArrayList等),以及锁和同步工具类。...
3. **同步机制**:Java提供了多种同步机制,如`synchronized`关键字、`volatile`关键字、`Lock`接口(包括`ReentrantLock`可重入锁)和`java.util.concurrent`包下的工具类。这些机制用于解决多线程环境下的数据一致...
6. **多线程**:Java内置对多线程的支持,`java.lang.Thread`类和`java.util.concurrent`包提供了创建和管理线程的工具,如`Runnable`接口,`ExecutorService`,`Future`和`Callable`等。 7. **网络编程**:`java...