package concurrent.Future;
import java.util.concurrent.Callable;
import java.util.concurrent.CompletionService;
import java.util.concurrent.ExecutorCompletionService;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
/**
* Future会等待提交的线程执行之后获取到返回数据
*
*/
public class FutureTest {
public static void main(String[] args) throws Exception{
// method1();
// method2();
method3();
}
public static void method1() throws Exception{
ExecutorService pool=Executors.newFixedThreadPool(3);
//使用completion提交callable时,一次提交一组callable,使用take方法来取,只要有一个任务运行完了就可以获取
CompletionService<String> completion=new ExecutorCompletionService<String>(pool);
Future<String> future=completion.submit(new Callable<String>() {
@Override
public String call() throws Exception {
Thread.sleep(2000);
return "hello";
}
});
System.out.println("等待结果");
System.out.println(future.get());
System.out.println(completion.take().get());
}
public static void method2() throws Exception{
ExecutorService pool=Executors.newSingleThreadExecutor();
Future<String> future=pool.submit(new Callable<String>() {
@Override
public String call() throws Exception {
Thread.sleep(2000);
return "abcdefg";
}
});
System.out.println("等待结果");
//System.out.println(future.get());
//如果1秒之内还拿不到结果,就会抛异常java.util.concurrent.TimeoutException
System.out.println(future.get(1, TimeUnit.SECONDS));
}
/**
* 提交多个任务
* 这里是一次提交10个任务
*/
public static void method3() throws Exception{
ExecutorService pool=Executors.newFixedThreadPool(10);
CompletionService<String> completion=new ExecutorCompletionService<String>(pool);
for(int i=1;i<=10;i++){
final int task=i;
completion.submit(new Callable<String>() {
@Override
public String call() throws Exception {
Thread.sleep(1000);
return "我是任务:"+task;
}
});
}
for(int i=0;i<10;i++){
System.out.println(completion.take().get());
}
}
}
分享到:
相关推荐
Callable 和 Future 是 Java 多线程编程中的两个关键接口,它们在 Java 5 及以上版本引入,以增强并发处理的能力。Callable 接口类似 Runnable,但提供了更丰富的功能,而 Future 对象则用于管理和控制异步计算的...
submit()方法用于提交Callable或Runnable任务,并返回一个Future实例,这个Future对应的就是CallableFuture。 4. **Future的使用**:通过示例展示如何使用Future.get()获取结果,以及如何处理可能抛出的...
Java使用Callable和Future创建线程操作示例主要介绍了Java使用Callable和Future创建线程操作,结合实例形式分析了java使用Callable接口和Future类创建线程的相关操作技巧与注意事项。 首先,Java 5开始,Java提供了...
无状态未来意味着每个Future实例不保存任何内部状态,这使得它们轻量且易于管理,尤其适合于并发和并行计算。无状态Future的使用可以避免线程阻塞,提高系统的响应速度和资源利用率。当我们创建一个Future时,我们...
NULL 博文链接:https://waitingkkk-163-com.iteye.com/blog/2232286
当异步任务抛出异常时,可以通过`Future`对象的`exception()`方法获取异常信息,或者在调用`result()`或`exception()`时传播异常。这有助于在并发环境中处理错误和异常。 ### 6. 关闭和取消任务 `Executor`对象有`...
通过ExecutorService提交Callable任务,可以获取Future实例来查询任务结果。 7. **线程池与Executor框架**:ExecutorService是Java并发编程的核心,它允许我们管理线程,控制并发级别,避免频繁创建和销毁线程的...
`CompletableFuture`可以与其他Future实例连接,或者与lambda表达式结合使用,以实现并行任务的组合。 最后,`javafx`包在Java 8中得到了进一步加强,提供了丰富的图形用户界面(GUI)开发工具,使得开发桌面应用变...
Demo-实例讲解线程池里面的UI如何刷新,处理两个开发者头疼的问题: 1. 数据经常需要读取更新,并且比较耗时,需要分步刷新UI. 2. UI界面切换后,如何停止掉子线程里面正在读取的数据而不会将旧数据刷新到新UI界面上...
通常,我们不会直接创建`Future`实例,而是通过`Executor`的`submit()`方法提交可调用对象,该方法会返回一个`Future`实例。`Future`的`.done()`方法是非阻塞的,可以检查操作是否已完成,而`.add_done_callback()`...
4. **错误处理**:"Future" 提供了一种优雅的错误处理方式,错误可以被捕获并转化为新的"Future" 实例,允许错误的传播和处理。这比传统的try-catch结构更加灵活,也更符合函数式编程的风格。 5. **组合与并发**:...
c++11多线程编程库中的future库的使用实例,供多线程编程参考学习
创建一个`ThreadPoolExecutor`实例后,我们可以通过`submit()`方法提交任务,它会返回一个`Future`对象,通过这个对象我们可以查询任务状态、等待结果或者取消任务。 2. **ProcessPoolExecutor**:进程池执行器则是...
1. **多线程编程**:Java提供了强大的并发支持,如Thread类和Runnable接口,以及ExecutorService和Future等高级工具。实例可能会涵盖线程同步(如synchronized关键字、wait/notify机制、ReentrantLock)和并发集合...
在C++中,我们可以使用`std::condition_variable`、`std::promise`和`std::future`等工具来构建消息传递系统。这种机制可以让一个线程发送消息(即数据),另一个线程接收到消息后进行处理。在上述的类实例化过程中...
当你有一个Callable任务并希望将其作为线程执行时,可以创建一个FutureTask实例,然后将这个实例传递给Executor。 下面简要说明它们之间的关系和用法: - Runnable通常用于简单的任务,不关心结果的返回。 - ...
Java并发编程Callable与Future的应用实例代码 在Java并发编程中,Callable与Future是两个非常重要的概念,它们通常结合使用来实现异步编程。在本文中,我们将详细介绍Callable与Future的应用实例代码,并探究它们在...
14. **并发编程**:探索高级并发工具如ExecutorService、Future和Callable,提高多线程应用的效率。 15. **数据结构与算法**:如排序算法(冒泡、选择、插入、快速、归并)、查找算法(顺序、二分)等,提升编程...
JAVA的并发库非常丰富,包括`java.lang.Thread`,`java.util.concurrent`包等,这个实例可能是关于线程同步,如使用`synchronized`关键字,wait/notify机制,或者更高级的并发工具如`ExecutorService`和`Future`。...
14. **并发编程**:Java提供了丰富的并发工具类,如ExecutorService、Future和Callable。实例将展示如何有效管理并发任务。 通过"Java实例100例",你将能够逐步提升Java编程技能,无论是基础概念的理解还是进阶技术...