Java - 多线程Callable、Executors、Future
http://blog.csdn.net/pipisorry/article/details/44341579
java并发工具类,主要使用的:CountDownLatch、CyclicBarrier、Semaphore、Exchanger。
Introduction
Callable接口代表一段可以调用并返回结果的代码;
Future接口表示异步任务,是还没有完成的任务给出的未来结果。
所以Callable用于产生结果,Future用于获取结果。
Callable接口:Java 5在concurrency包中引入了java.util.concurrent.Callable 接口,它和Runnable接口很相似,但它可以返回一个对象或者抛出一个异常。Callable接口使用泛型去定义它的返回类型。
Executors类:提供了一些有用的方法在线程池中执行Callable内的任务。由于Callable任务是并行的,我们必须等待它返回的结果。
Future对象:java.util.concurrent.Future对象为我们解决了这个问题。在线程池提交Callable任务后返回了一个Future对象,使用它可以知道Callable任务的状态和得到Callable返回的执行结果。Future提供了get()方法让我们可以等待Callable结束并获取它的执行结果。
Callable接口的源码:
public interface Callable<V> { V call() throws Exception; // 计算结果 }
Future接口的源码:
public interface Future<V> { boolean cancel(boolean mayInterruptIfRunning);// 试图取消对此任务的执行 boolean isCancelled(); // 如果在任务正常完成前将其取消,则返回 true boolean isDone(); // 如果任务已完成,则返回 true V get() throws InterruptedException, ExecutionException; // 如有必要,等待计算完成,然后获取其结果 // 如有必要,最多等待为使计算完成所给定的时间之后,获取其结果(如果结果可用)。 V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException; }
一个例子
private ExecutorService executor = Executors.newFixedThreadPool(numberOfThreads);
try {Callable<TopicModel> callable = new TopicModelCallable(corpus,param);Future<TopicModel> future = executor.submit(callable);futureList.add(future);} catch (Exception ex) {ex.printStackTrace();}
for (Future<TopicModel> future : futureList) {TopicModel topicModel = future.get();topicModelList.add(topicModel);}
Note:
1. 用语料和对应参数创建可调用对象callable, 提交给executor并行执行, 结果保存在future对象中,最后可以用future对象的get()方法提取执行结果
2. ExcutorService接口
ExecutorService提供了管理终止的方法,以及可为跟踪一个或多个异步任务执行状况而生成 Future 的方法。
主要函数:
<T> Future<T> submit(Callable<T> task)提交一个返回值的任务用于执行,返回一个表示任务的未决结果的 Future。该 Future 的 get 方法在成功完成时将会返回该任务的结果。如果想立即阻塞任务的等待,则可以使用 result = exec.submit(aCallable).get(); 形式的构造。注:Executors 类包括了一组方法,可以转换某些其他常见的类似于闭包的对象,例如,将 PrivilegedAction 转换为 Callable 形式,这样就可以提交它们了。参数:task - 要提交的任务 返回:表示任务等待完成的 Future 抛出:RejectedExecutionException - 如果任务无法安排执行 NullPointerException - 如果该任务为 null
注意:关于submit的使用和Callable可以参阅《使用Callable返回结果》
[java中Executor、ExecutorService、ThreadPoolExecutor介绍]
from:http://blog.csdn.net/pipisorry/article/details/44341579
ref:http://blog.csdn.net/mazhimazh/article/details/19291965
[如何管理Java线程池及搭建分布式Hadoop调度框架]
Java - 多线程Callable、Executors、Future相关推荐
- Java多线程-Callable和Future
Callable和Future出现的原因 创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口. 这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果. 如果需 ...
- Java多线程编程中Future模式的详解
转载自 https://www.cnblogs.com/winkey4986/p/6203225.html Java多线程编程中,常用的多线程设计模式包括:Future模式.Master-Worker ...
- Java多线程Callable接口
Callable和Future出现的原因 创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口. 这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果. 如 ...
- Java中Callable和Future
Java中为什么需要Callable 在java中有两种创建线程的方法: 一种是继承Thread类,重写run方法: public class TestMain {public static void ...
- java 多线程Callable和Runable执行顺序问题详解
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt125 毫无疑问 Runnable会进行异步执行,此处不多说,主要说明Call ...
- java多线程都有几种方式实现
有三种: (1)继承Thread类,重写run函数 创建: [java] view plaincopy <span style="font-size:12px; ...
- Java多线程,Thread,Runnable,Callable Task,Future<Task>,CompletionService
一.Java多线程的方法 1. 继承 Thread 2. 实现 Runnable 3. 实现 Callable 可以有返回值 package com.test;import java.util.Arr ...
- Java多线程系列--“JUC线程池”06之 Callable和Future
转载自 Java多线程系列--"JUC线程池"06之 Callable和Future Callable 和 Future 简介 Callable 和 Future 是比较有趣的一 ...
- Java多线程编程:Callable、Future和FutureTask浅析(多线程编程之四)
java多线程-概念&创建启动&中断&守护线程&优先级&线程状态(多线程编程之一) java多线程同步以及线程间通信详解&消费者生产者模式&死锁 ...
- 【头歌实训】Java高级特性 - 多线程基础(1)使用线程,使用 Callable 和 Future 创建线程
任务描述 本关任务:通过 Callable 和 Future 来创建线程. 相关知识 从Java1.5版本开始,就提供了 Callable 和 Future 来创建线程,这种方式也是在Java程序员面 ...
最新文章
- linux rpm找不到命令_linux环境下 python环境import找不到自定义的模块
- 优化CSS在网页中的加载方式
- mysql每秒支持多少并发_如何设计一个高并发系统?
- unity3d Sentinel key not found (H0007)解决方法
- 全网唯一的Microsoft?NETFramework3?5SP1简体中文完整版离线安装包安装netframewo
- Hadoop自带的一些程序示例
- python字典赋值方法_python如何给字典的键对应的值为字典项的字典赋值
- ASP中巧用Response属性
- spark运行wordcount
- JAVA 编码格式转换工具类
- GF4各波段太阳辐照度
- Linux 实现与宿主机共享文件夹 Centos7
- 会计计算机,什么是好的计算机会计软件?
- 常见面试算法题汇总(Android面试)
- 聚类分析通俗易懂解释
- 武汉市公积金提取流程
- 安卓iccid_普通人也可以做码农?安卓手机上这些代码你也可以用
- ISO 认证是哪三个?
- Windows操作系统基础
- 2012服务器系统设,server2012服务器安装及设置
热门文章
- EF安装和更新数据库
- Java集合ArrayList的应用
- 在ECSHOP模板商品列表页 显示商品的评论等级和评论数量
- blog转到CNBlog了
- PaddlePaddle(2)——数据获取与处理(以CV任务为主)
- ExtJs + Struts2 + JSON 程序总结
- 为什么有人不喜欢标准成本
- Factorization Mechanism
- 【NeurIPS2020】之预训练语言模型压缩
- 收藏 | NLP论文、代码、博客、视频资源(LSTM,指针模型,Attention, ELMo,GPT,BERT、多任务学习等)...