JAVA线程池中的Callable和Future
- import java.util.Random;
- 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;
- /**
- * Callable Future completionService test
- *
- * Future取得结果类型和Callable返回的结果
- *
- * Callable需要ExecutorService使用submit方式提交
- *
- * CompletionService 用于提交一组Callable,其中take方法返回已经完成的Callable任务
- *
- * @author duwenlei
- *
- */
- public class CallableFutureTest {
- private static void testCallable() throws Exception {
- ExecutorService service = Executors.newSingleThreadExecutor();
- Future<String> future = service.submit(new Callable<String>() {
- @Override
- public String call() throws Exception {
- Thread.sleep(5000); //停止5秒返回
- return "hello";
- }
- });
- System.out.println("等待结果");
- System.out.println("取得结果:"+future.get());
- //System.out.println("取得结果:"+future.get(1, TimeUnit.SECONDS));
- service.shutdown();
- }
- private static void testCompletionService() throws Exception{
- ExecutorService executor = Executors.newFixedThreadPool(3);
- CompletionService<Integer> service = new ExecutorCompletionService<Integer>(executor); //需要一个线程池
- for (int i = 1; i <= 10; i++) {
- final int seq = i;
- service.submit(new Callable<Integer>() {
- @Override
- public Integer call() throws Exception {
- Thread.sleep(new Random().nextInt(5000)); //休息时间,不确定
- return seq;
- }
- });
- }
- for (int i = 1; i <= 10; i++) {
- System.out.println(service.take().get());
- }
- executor.shutdown();
- }
- public static void main(String[] args) {
- try {
- testCallable();
- } catch (Exception e) {
- e.printStackTrace();
- }
- try {
- testCompletionService();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
JAVA线程池中的Callable和Future的更多相关文章
- Java多线程系列--“JUC线程池”06之 Callable和Future
概要 本章介绍线程池中的Callable和Future.Callable 和 Future 简介示例和源码分析(基于JDK1.7.0_40) 转载请注明出处:http://www.cnblogs.co ...
- Java 线程池中的线程复用是如何实现的?
前几天,技术群里有个群友问了一个关于线程池的问题,内容如图所示: 关于线程池相关知识可以先看下这篇:为什么阿里巴巴Java开发手册中强制要求线程池不允许使用Executors创建? 那么就来和大家探讨 ...
- Java线程池中的核心线程是如何被重复利用的?
真的!讲得太清楚了!https://blog.csdn.net/MingHuang2017/article/details/79571529 真的是解惑了 本文所说的"核心线程". ...
- Java线程池中线程的状态简介
首先明确一下线程在JVM中的各个状态(JavaCore文件中) 1.死锁,Deadlock(重点关注) 2.执行中,Runnable(重点关注) 3.等待资源,Waiting on condition ...
- Java线程池中submit()和execute()方法有什么区别
两个方法都可以向线程池提交任务,execute()方法的返回类型是void,它定义在Executor接口中,而submit()方法返回有计算结构的Future对象,它定义在ExecutorServic ...
- Java线程池中submit() 和 execute()方法的区别
两个方法都可以向线程池提交任务, execute()方法的返回类型是void,它定义在Executor接口中, 而submit()方法可以返回持有计算结果的Future对象,它定义在ExecutorS ...
- Java线程池中线程的生命周期
设:我们有一个coreSize=10,maxSize=20,keepAliveTime=60s,queue=40 1.池初始化时里面没有任何线程. 2.当有一个任务提交到池就创建第一个线程. 3.若继 ...
- Java 线程池中 submit() 和 execute()方法有什么区别?
两个方法都可以向线程池提交任务,execute()方法的返回类型是 void,它定义在 Executor 接口中. 而 submit()方法可以返回持有计算结果的 Future 对象,它定义在 Exe ...
- Java线程池中submit()和execute之间的区别?
一: submit()方法,可以提供Future < T > 类型的返回值. executor()方法,无返回值. execute无返回值 public void execute(Runn ...
随机推荐
- jquery 取消绑定事件
$(".TreeView1_0").unbind("mouseover"); $("#id").attr("onclick&quo ...
- php使用 memcache 来存储 session 方法总结
设置session用memcache来存储 方法I: 在 php.ini 中全局设置 session.save_handler = memcache session.save_path = " ...
- VMware workstation CentOs 7 虚拟机网卡设置为NAT模式并设置固定IP
一.背景知识 虚拟机网络模式 无论是vmware workstation,virtual box,virtual pc等虚拟机软件,一般来说,虚拟机有三种网络模式: 1.桥接 2.NAT 3 ...
- .dmp文件导入个别表
imp bizinfo_qy/bizinfo_qy@orcl161 file=D:\收付费核算系统\分线\bizinfo_qy.dmp log=bizinfo_qy.log TABLES=(al_i ...
- ios数据库SQLite实现
SQLite嵌入式数据库 1.支持时间,不需要配置,不需要安装,不需要管理员; 2.支持大部分SQL92; 3.完整的数据库保存在磁盘上面的一个文件,同一个数据库文件可以在不同机器上面使用.最大支持数 ...
- angularJs非空校验requied
<!DOCTYPE html><html><head><meta charset="utf-8"><title>< ...
- DHCP中继
DHCP中继 要求: 假设公司现在有两个部门分别为 销售部门,生产部门 对这两个部门分配不同网段, 销售部门 192.168.1.0/24 生产部门 192.168.2.0/24 为了节约使用LINU ...
- 网页内嵌入QQ通信组件,唤起QQ,针对不同平台的处理方式
web浏览器中嵌入QQ通信组件,目前发现有两种方式,主要是区分 IOS平台(苹果系列)和其他平台(PC 安卓等……),下面是代码区别: <li><a href="http: ...
- react 评论列表插入评论数据 unshift
// unshift 新增数据放到最上面 //插入 回复/发表 评论else if(action.type === INSERT_COMMENT ){ let content = action.tex ...
- 并发工具类:CountDownLatch、CyclicBarrier、Semaphore
在多线程的场景下,有些并发流程需要人为来控制,在JDK的并发包里提供了几个并发工具类:CountDownLatch.CyclicBarrier.Semaphore. 一.CountDownLatch ...