《Java并发编程实战》第六章 任务运行 读书笔记
一、 在线程中运行任务
二、Executor框架
2. ExecutorService方法submit、execute
3. ExecutorService.submit 返回 Future
| 方法名 | 解释 |
| newFixedThreadPool | 将创建一个固定长度的线程池,每当提交一个任务时就创建一个线程,知道达到线程池的最大数量,这时线程池的规模将不再变化(假设某个线程因为发生了未预期的Exception而结束。那么线程池会补充一个新的线程。) |
| newCachedThreadPool | 将创建一个可缓存的线程池,假设线程池的当前规模超过了处理需求时,那么将回收空暇的线程,而当需求添加时,则能够加入新的线程。线程池的规模不存在不论什么限制。 |
| newSingleThreadExecutor | 将会创建一个单线程的Executor。它创建单个工作者线程来运行任务。假设这个线程异常结束,会创建还有一个线程来替代。newSingleThreadExecutor能确保按照任务在队列中的顺序来串行运行(比如FIFO、LIFO、优先级) |
| newScheduledThreadPool | 创建了一个固定长度的线程池。并且以延迟或定时的方式来运行任务,类似于Timer。 |
以上四个方法都会返回ExecutorService。ExecutorService的生命周期有3种状态:执行、关闭和已终止。
| 方法名 | 解释 |
| shutdown | 将运行平缓的关闭过程:不再接受新的任务。同一时候等待已经提交的任务运行完毕—包含那些还未開始运行的任务。 |
| shutdownNow | 将运行粗暴的关闭过程:它将尝试取消全部运行中的任务。而且不再启动队列中尚未開始运行的任务。 |
三、找出可利用的并行性
ExecutorService executor = Executors.newSingleThreadExecutor();
Callable<Object> task = new Callable<Object>() {
public Object call() throws Exception {
Object result = "...";
return result;
}
};
Future<Object> future = executor.submit(task);
future.get(); // 等待至完毕 Future<Object> future = executor.submit(task);
// 等待到任务被运行完毕返回结果
// 假设任务运行出错,这里会抛ExecutionException
future.get();
//等待3秒。超时后会抛TimeoutException
future.get(3, TimeUnit.SECONDS); Callable<Object> task = new Callable<Object>() {
public Object call() throws Exception {
Object result = …;
return result;
}
};
有两种任务:
Runnable
Callable - 须要返回值的任务
Task Submitter把任务提交给Executor运行,他们之间须要一种通讯手段,这样的手段的详细实现。通常叫做Future。
Future通常包含get(堵塞至任务完毕), cancel,get(timeout)(等待一段时间)
等等。Future也用于异步变同步的场景。
future.get(3, TimeUnit.SECONDS);
运行给定的任务,当全部任务完毕时,返回保持任务状态和结果的 Future 列表。
返回列表的全部元素的 Future.isDone() 为 true。注意,能够正常地或通过抛出异常来终止已完毕 任务。假设正在进行此操作时改动了给定的 collection,则此方法的结果是不确定的。
四、资料:
聊聊并发(三)——JAVA线程池的分析和使用(原理)
http://www.infoq.com/cn/articles/java-threadPool
Java(Android)线程池(使用)
http://www.trinea.cn/android/java-android-thread-pool/
Java Thread Pool Example using Executors and ThreadPoolExecutor
http://www.journaldev.com/1069/java-thread-pool-example-using-executors-and-threadpoolexecutor
工具能够查看线程数
jconsole.exe
《Java并发编程实战》第六章 任务运行 读书笔记的更多相关文章
- 《Java并发编程实战》第二章 线程安全性 读书笔记
一.什么是线程安全性 编写线程安全的代码 核心在于要对状态訪问操作进行管理. 共享,可变的状态的訪问 - 前者表示多个线程訪问, 后者声明周期内发生改变. 线程安全性 核心概念是正确性.某个类的行为与 ...
- Java并发编程实战---第六章:任务执行
废话开篇 今天开始学习Java并发编程实战,很多大牛都推荐,所以为了能在并发编程的道路上留下点书本上的知识,所以也就有了这篇博文.今天主要学习的是任务执行章节,主要讲了任务执行定义.Executor. ...
- Java多线程编程实战指南(核心篇)读书笔记(三)
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76686044冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...
- Java多线程编程实战指南(核心篇)读书笔记(五)
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76730459冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...
- Java多线程编程实战指南(核心篇)读书笔记(四)
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76690961冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...
- Java多线程编程实战指南(核心篇)读书笔记(二)
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76651408冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...
- Java多线程编程实战指南(核心篇)读书笔记(一)
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76422930冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...
- Java并发编程实战 第16章 Java内存模型
什么是内存模型 JMM(Java内存模型)规定了JVM必须遵循一组最小保证,这组保证规定了对变量的写入操作在何时将对其他线程可见. JMM为程序中所有的操作定义了一个偏序关系,称为Happens-Be ...
- 【java并发编程实战】第一章笔记
1.线程安全的定义 当多个线程访问某个类时,不管允许环境采用何种调度方式或者这些线程如何交替执行,这个类都能表现出正确的行为 如果一个类既不包含任何域,也不包含任何对其他类中域的引用.则它一定是无状态 ...
随机推荐
- jQuery 获取父元素、子元素、同级元素
详情:http://www.w3school.com.cn/jquery/jquery_traversing_ancestors.asp parent() 方法返回被选元素的直接父元素.(常用) ...
- php几个比较高级的函数
1.传递任意数量的函数参数 我们在.NET或者JAVA编程中,一般函数参数个数都是固定的,但是PHP允许你使用任意个数的参数.下面这个示例向你展示了PHP函数的默认参数: 1 2 3 4 5 6 7 ...
- Python之简单的SMTP发送邮件详细教程附代码
简介 Python发送邮件的教程本人在网站搜索的时候搜索出来了一大堆,但是都是说了一大堆原理然后就推出了实现代码,我测试用给出的代码进行发送邮件时都不成功,后面找了很久才找到原因,这都是没有一个详 ...
- Day22 JSONP、瀑布流
一.JSONP JSONP a.Ajax $.ajax({ url:'/index/', dataType:'json', data:{}, type:'GET', success:function( ...
- highcharts-Highmaps 动态传入城市名称
做前端按地区(地图)分布监控数据展示用了 HIGHMAPS JAVASCRIPT MAPS 控件,很好很强大. 基础实现是这样的:调用插件动态传入需要展示的数据(data),插件会在地图数据(mapd ...
- commons-lang阅读(一)
基于commons-lang-2.4.jar org.apache.commons.lang.time.DateFormatUtils类 package org.apache.commons.lang ...
- Netty高性能之道
1. 背景 1.1. 惊人的性能数据 最近一个圈内朋友告诉我,通过使用Netty4 + Thrift压缩二进制编解码技术,他们实现了10W TPS(1K的复杂POJO对象)的跨节点远程服务调用.相比于 ...
- March of the Penguins
poj3498:http://poj.org/problem?id=3498 题意:某个冰块上有a只企鹅,总共可以跳出去b只,问是否可能所有的企鹅都跳到某一块冰块上,输出所有的可能的冰块的编号. 由于 ...
- Android开源项目发现--- 工具类向下兼容篇(持续更新)
1. ActionBarSherlock 为Android所有版本提供统一的ActionBar,解决4.0以下ActionBar的适配问题 项目地址:https://github.com/JakeWh ...
- Oracle 搜集统计信息
常用的统计信息收集脚本: 非分区表: BEGIN DBMS_STATS.GATHER_TABLE_STATS(ownname => 'SCOTT', ...