Java并发编程的艺术

Java并发编程的艺术

  编辑推荐

  《Java并发编程的艺术》正是为了解决这个问题而写的。书中采用循序渐进的方式,从并发编程的底层实现机制入手,逐步介绍了在设计Java并发程序时各种重要的技术、设计模式与应用,同时辅以丰富的示例代码,使得开发人员能够更快地Java并发编程的要领,围绕着Java平台的基础并能快速地构建大规模的并发应用程序。

   作者简介

  方腾飞(花名清英,英文名kral),蚂蚁金服集团技术专家,从事Java开发近10年。5年以上的团队管理、项目管理和敏捷开发经验,崇尚团队合作。曾参与CMS、电子海图、SOC、ITIL、电子商务网站和信贷管理系统等项目。目前在蚂蚁金服网商银行贷款管理团队负责数据采集平台开发工作。与同事合作开发了tala code Review插件,深受阿里数千名工程师拥趸,并开发过开源工具jdbcutil(https://github.com/kiral/utils)。创办了并发编程网(http://ifeve.com),组织翻译了百余篇国外优秀技术文章,并曾为InfoQ撰写“聊聊并发”专栏,在《程序员》撰写敏捷实践系列文章,曾用博客http://kiraljavaeye.com。魏鹏,阿里巴巴集团技术专家,在阿里巴巴中国网站技术部工作多年,曾担任中国网站交易平台架构师,主导了交易系统服务化工作,设计实现的数据迁移系统高效地完成了阿里巴巴中国网站交易数据到阿里巴巴集团的迁移工作。目前在阿里巴巴共享业务事业部从事Java应用容器Pandora和服务框架HSF的相关工作,其中Java应用容器Pandora是阿里巴巴中间件运行的基础,而服务框架HSF则是阿里巴巴集团实现服务化的主要解决方案,二者在阿里巴巴拥有最为广泛的使用量。个人平时喜欢阅读技术书籍,翻译一些国外优秀文档,喜欢总结、乐于分享,对Java应用容器、多线程编程以及分布式系统感兴趣。程晓明,1号店资深架构师,从事1号店交易平台系统的开发,技术上关注并发与NIO。因5年前遇到的一个线上故障,解决过程中对Java并发编程产生了浓厚的兴趣,从此开始了漫长的探索之旅:从底层实现机制、内存模型到Java同步。纵观我自己对Java并发的学习过程.是一个从高层到底层再到高层的一个反复迭代的过程,我估计很多读者的学习过程应该与我类似。文章多见诸《IBM developer Works》、InfoQ和《程序员》。

   目录

  前言

  第1章并发编程的挑战1

  1.1上下文切换1

  1.1.1多线程一定快吗1

  1.1.2测试上下文切换次数和时长3

  1.1.3如何减少上下文切换3

  1.1.4减少上下文切换实战4

  1.2死锁5

  1.3资源的挑战6

  1.4本章小结7

  第2章Java并发机制的底层实现原理8

  2.1volatile的应用8

  2.2synchronized的实现原理与应用11

  2.2.1Java对象头12

  2.2.2锁的升级与对比13

  2.3原子操作的实现原理16

  2.4本章小结20

  第3章Java内存模型21

  3.1Java内存模型的基础21

  3.1.1并发编程模型的两个关键问题21

  3.1.2Java内存模型的抽象结构22

  3.1.3从源代码到指令序列的重排序23

  3.1.4并发编程模型的分类24

  3.1.5happens—before简介26

  3.2重排序27

  3.2.1数据依赖性28

  3.2.2as—if—serial语义28

  3.2.3程序顺序规则29

  3.2.4重排序对多线程的影响29

  3.3顺序一致性31

  3.3.1数据竞争与顺序一致性31

  3.3.2顺序一致性内存模型32

  3.3.3同步程序的顺序一致性效果34

  3.3.4未同步程序的执行特性35

  3.4volatile的内存语义38

  3.4.1volatile的特性38

  3.4.2volatile写—读建立的happens—before关系39

  3.4.3volatile写—读的内存语义40

  3.4.4volatile内存语义的实现42

  3.4.5JSR—133为什么要增强volatile的内存语义46

  3.5锁的内存语义47

  3.5.1锁的—获取建立的

  happens—before关系47

  3.5.2锁的和获取的内存语义48

  3.5.3锁内存语义的实现50

  3.5.4concurrent包的实现54

  3.6final域的内存语义55

  3.6.1final域的重排序规则55

  3.6.2写final域的重排序规则56

  3.6.3读final域的重排序规则57

  3.6.4final域为引用类型58

  3.6.5为什么final引用不能从构造函数内“溢出”59

  3.6.6final语义在处理器中的实现61

  3.6.7JSR—133为什么要增强f?inal的语义62

  3.7happens—before62

  3.7.1JMM的设计62

  3.7.2happens—before的定义64

  3.7.3happens—before规则65

  3.8双重检查锁定与延迟初始化67

  3.8.1双重检查锁定的由来67

  3.8.2问题的根源69

  3.8.3基于volatile的解决方案71

  3.8.4基于类初始化的解决方案72

  3.9Java内存模型综述78

  3.9.1处理器的内存模型78

  3.9.2各种内存模型之间的关系80

  3.9.3JMM的内存可见性80

  3.9.4JSR—133对旧内存模型的修补81

  3.10本章小结82

  第4章Java并发编程基础83

  4.1线程简介83

  4.1.1什么是线程83

  4.1.2为什么要使用多线程84

  4.1.3线程优先级85

  4.1.4线程的状态87

  4.1.5Daemon线程90

  4.2启动和终止线程91

  4.2.1构造线程91

  4.2.2启动线程92

  4.2.3理解中断92

  4.2.4过期的suspend()、resume()和stop()93

  4.2.5安全地终止线程95

  4.3线程间通信96

  4.3.1volatile和synchronized关键字96

  4.3.2等待/通知机制98

  4.3.3等待/通知的经典范式101

  4.3.4管道输入/输出流102

  4.3.5Thread.join()的使用103

  4.3.6ThreadLocal的使用105

  4.4线程应用实例106

  4.4.1等待超时模式106

  4.4.2一个简单的数据库连接池示例106

  4.4.3线程池技术及其示例110

  4.4.4一个基于线程池技术的简单Web服务器114

  4.5本章小结118

  第5章Java中的锁119

  5.1Lock接口119

  5.2队列同步器121

  5.2.1队列同步器的接口与示例121

  5.2.2队列同步器的实现分析124

  5.3重入锁136

  5.4读写锁140

  5.4.1读写锁的接口与示例141

  5.4.2读写锁的实现分析142

  5.5LockSupport工具146

  5.6Condition接口147

  5.6.1Condition接口与示例148

  5.6.2Condition的实现分析150

  5.7本章小结154

  第6章Java并发容器和框架155

  6.1ConcurrentHashMap的实现原理与使用155

  6.1.1为什么要使用ConcurrentHashMap155

  6.1.2ConcurrentHashMap的结构156

  6.1.3ConcurrentHashMap的初始化157

  6.1.4定位Segment159

  6.1.5ConcurrentHashMap的操作160

  6.2ConcurrentLinkedQueue161

  6.2.1ConcurrentLinkedQueue的结构162

  6.2.2入队列162

  6.2.3出队列165

  6.3Java中的阻塞队列167

  6.3.1什么是阻塞队列167

  6.3.2Java里的阻塞队列168

  6.3.3阻塞队列的实现原理172

  6.4Fork/Join框架175

  6.4.1什么是Fork/Join框架175

  6.4.2工作窃取算法176

  6.4.3Fork/Join框架的设计177

  6.4.4使用Fork/Join框架177

  6.4.5Fork/Join框架的异常处理179

  6.4.6Fork/Join框架的实现原理179

  6.5本章小结181

  第7章Java中的13个原子操作类182

  7.1原子更新基本类型类182

  7.2原子更新数组184

  7.3原子更新引用类型185

  7.4原子更新字段类187

  7.5本章小结188

  第8章Java中的并发工具类189

  8.1等待多线程完成的CountDownLatch189

  8.2同步屏障CyclicBarrier191

  8.2.1CyclicBarrier简介191

  8.2.2CyclicBarrier的应用场景193

  8.2.3CyclicBarrier和CountDownLatch的区别195

  8.3控制并发线程数的Semaphore196

  8.4线程间交换数据的Exchanger198

  8.5本章小结199

  第9章Java中的线程池200

  9.1线程池的实现原理200

  9.2线程池的使用203

  9.2.1线程池的创建203

  9.2.2向线程池提交任务205

  9.2.3关闭线程池205

  9.2.4合理地配置线程池206

  9.2.5线程池的206

  9.3本章小结207

  第10章Executor框架208

  10.1Executor框架简介208

  10.1.1Executor框架的两级调度模型208

  10.1.2Executor框架的结构与208

  10.2ThreadPoolExecutor详解213

  10.2.1FixedThreadPool详解213

  10.2.2SingleThreadExecutor详解214

  10.2.3CachedThreadPool详解215

  10.3ScheduledThreadPoolExecutor详解217

  10.3.1ScheduledThreadPoolExecutor的运行机制217

  10.3.2ScheduledThreadPoolExecutor的实现218

  10.4FutureTask详解221

  10.4.1FutureTask简介222

  10.4.2FutureTask的使用222

  10.4.3FutureTask的实现224

  10.5本章小结227

  第11章Java并发编程实践228

  11.1生产者和消费者模式228

  11.1.1生产者消费者模式实战229

  11.1.2多生产者和多消费者场景231

  11.1.3线程池与生产消费者模式234

  11.2线上问题定位234

  11.3性能测试236

  11.4异步任务池238

  11.5本章小结240

   文摘

  假设一个线程A执行writer()方法,另一个线程B执行reader()方法。这里的操作2使得对象还未完成构造前就为线程B可见。即使这里的操作2是构造函数的最后一步,且在程序中操作2排在操作1后面,执行read()方法的线程仍然可能无法看到final域被初始化后的值,因为这里的操作1和操作2之间可能被重排序。实际的执行时序可能如图3—32所示。

  从图3—32可以看出:在构造函数返回前,被构造对象的引用不能为其他线程所见,因为此时的final域可能还没有被初始化。在构造函数返回后,任意线程都将能看到final域正确初始化之后的值。

  3.6.6 final语义在处理器中的实现

  现在我们以X86处理器为例,说明final语义在处理器中的具体实现。

  我们提到,写final域的重排序规则会要求编译器在final域的写之后,构造函数return之前插入一个StoreStore障屏。读final域的重排序规则要求编译器在读final域的操作前面插入一个LoadLoad屏障。

  由于X86处理器不会对写一写操作做重排序,所以在X86处理器中,写final域需要的StoreStore障屏会被省略掉。同样,由于X86处理器不会对存在间接依赖关系的操作做重排序,所以在X86处理器中,读final域需要的LoadLoad屏障也会被省略掉。也就是说,在X86处理器中,final域的读/写不会插入任何内存屏障!


Java并发编程的艺术

相关推荐

证券公司次级债管理

  基本信息  中国证券监督管理委员会公告  〔2012〕51 号  现公布《证券公司次级债管理》,自公布之日起施行。 中国证券监督管理委员会  2012年12月27日   管理   证券公司次级债管理   xxx条  为规范证券公司次级债管理,投资者权益,根据《证券法》、《证券公司监督管理条例》等法律、行规的,制定本。   第二条本所称... (继续浏览)

边买边赚

  模式介绍 边买边赚边买边赚是蚂蚁在线打造的消费型循环金融全新闭环生态圈,通过整合理财 (蚂蚁在线)和海淘(蚂蚁海淘)两个平台,借助互联网的高效便捷特性突破多重壁垒,为投资者、融资者、生产者和消费者创造一站式的服务。[2]   服务架设CEO刘文中消费者通过蚂蚁在线平台选择不同供应链产品进行投资,赚取收益、获取蚂蚁海淘优惠券;海淘省钱购物的同时还可获... (继续浏览)

短期证券

  介绍短期证券是指各种能够随时变现、持有时间不超过一年的有价证券以及不超过一年的其他投资。短期证券的变现能力非常强,因为公司可以随时在证券市场出售,这些有价证券,因此常被人们称为准现金。   投资渠道1.债券:信用风险低、利率低、利息免交所得税: 短期国库券(Treasury Bills):1年左右,最常见的使91天或182天。 中期国库券(... (继续浏览)

米粒儿

  网站介绍  米粒儿网,是目前国内专业的化妆品特卖平台。米粒儿网是将热销的产品,以超低的价格限量发售,追求创新的形式、完美的购物体验、每天分享更新。   网站特色 服务体验米粒儿网承诺:100%正品实拍、闪电发货……一切只为您的良好体验。美丽不打折!   网站口号  因为尊重专业,所以每个环节替您苛刻要求,必然值得信赖。  因为崇尚美丽,所以每个产品替您慎... (继续浏览)

美国预托证券

  美国预托证券美国预托证券American Depositary Receipt(ADR),美国预托证券是由一家美国银行重新包装非美国证券而成的一种美国有价证券。美国预托证券是某一数目外国股票的拥有证明,而原始股票由发行公司本国的保管人持有。美国预托证券的证书、过户和交收过程都与美国证券相同。与直接购买外国股票比较,美国投资者通常宁愿选择美国预托证券,因为... (继续浏览)

魏珂

  人物经历  从硅谷到沃顿  1999年,魏珂进入上海交大就读计算机学院。大二时,学校成立软件学院,他以优异成绩考入软件学院。  2003年,大学毕业后,魏珂选择创业。在大学里,他看到很多同学喜欢三五成群地约起来玩儿CS、星际争霸等单机、局域网游戏,但一到假期,就没法和身处异地的同机对战了,于是他创办了一个叫鏖战的游戏对战平台来解决该问题,并由此掘到的人生... (继续浏览)

蓝色幸福指数城报告

  简介 《蓝色幸福指数城市报告》是由支付宝、地图、知乎、IPE、墨迹天气、36氪、阿里旅行、陌陌等8家互联网公司参与调查,由蚂蚁金服商学院出具的一份报告,试图用数据回答幸福是什么的问题,目的是通过大数据的方式,了解在互联网时代,人们对自己生活的满意度。因为这次参与调查的8家公司的LOGO都是蓝色的,所以这次的幸福指数被叫做蓝色幸福指数。区别于传统测算... (继续浏览)

2015年支付宝年账单

  2016年1月12日,蚂蚁金服对外发布2015年支付宝年账单。2015年支付宝年账单显示,按省级行政区划分来看,上海人均支付金额排名全国首位,达到104155元,成为xxx人均支付突破10万元的省级行政区;浙江省以94192元排第二,、江苏和福建分列三到五位。 ... (继续浏览)

东旭鹰打油诗和杂言词

  小说类型   休闲美文   内容简介  东旭鹰打油诗与杂牌词,大致分为新左翼诗词、咏古叹史、感慨咏志、咏景、诗、小说诗词、随笔仿古词以及近期新作。东旭鹰所作诗词大都任性而为,不仅是在诗词写作风格上,还有就是在写作时机上,基本是有感则作,无感则止。   新左翼诗词 新左翼诗词是作者以中国主义者的身份及视角所创作的诗词,大体上是表达学习前辈、奋发... (继续浏览)

中国证券期货

  简介  中国证券期货是经中华人民国新闻出版总署批准,于1993年创办。是中国xxx同时横跨证券、期货两大领域的经济类专业期刊,同时也是我国xxx一份在公开发行的证券期货综合性专业刊物。是中国期刊网、龙源国际期刊网、万方数据系统、中国学术期刊(光盘版)、中国核心期刊(遴选)数据库等全文收录期刊、中国学术期刊综合评价数据库来源期刊。   旨  中国证... (继续浏览)

网络空间安全技术大赛

  主办单位  陕西省计算机教育学会  陕西省兵工学会新型网络与检测控制国家地方联合工程实验室    承办单位西安工业大学   协办单位 金牌合作企业   红亚华宇科技有限公司   银牌合作企业  蚂蚁金服安全应急响应中心  西普阳光教育科技有限公司陕西知道创宇信息技术有限公司  永信至诚科技有限公司   合作悦西安网[2]  《中国信息... (继续浏览)

国信证券泰然九营业部

  基本信息  2007年净资产收益率排名行业xxx;2007年投资银行业务股票发行家数排名xxx;2007年净利润排名行业第三;2008年经纪业务股票基金权证交易量排名第三。2009年,公司抓住市场机遇,实现利润总额52.39亿元,净利润41.4亿元,净资产收益率31.6%,经纪业务股票基金交易额排名行业第三,投资银行业务股票发行家数排名行业xxx,承销总... (继续浏览)

钱隆

  百科名片钱隆是福晟集团创立于2004年,是一家以房地产开发为龙头,全资控股福建六建建设集团,涉及建筑建材、城市运营、工程施工、物业管理等行业的大型综合性集团,下属30余家子公司,员工近2000人。在福州成功开发了福晟钱隆世家、福晟钱隆首府、福晟钱隆天下、福晟钱隆金山、福晟钱隆御景、福晟钱隆学府、福晟钱隆首座等系列品牌项目;横跨福州、成都、长沙、漳... (继续浏览)

代理买卖证券款

  英文表达  代理买卖证券款(Acting trading securities)   会计处理  一、本科目核算企业(证券)接受客户委托,代理客户买卖股票、债券和基金等有价证券而收到的款项。 企业(证券)代理客户认购新股的款项、代理客户领取的现金股利和债券利息、代理客户向证券交易所支付的配股款等,也在本科目核算。  二、本科目可按客户类别等... (继续浏览)

智糖

目录 ▪ 智糖简介智糖简介各位投资人,大家好,我们目前正在和英国医疗器械公司合作,在中国落地一款基于超材料技术的无创血糖仪产品,这个项目的优势在于: 1.技术相对成熟,已经完成动物试验和部分临床试验,准确率90%; 2.投资于国内,资金易于把控。 劣势在于: 1.产品尚需改进,微型化; 2.试验结果还需在微型机测试; 3.作为三类医疗器械,且cfda尚未批准... (继续浏览)

闻心电子

目录 ▪ 闻心电子定位闻心电子定位全球心脏病患者数量巨大,心脏亚健康人群又数不胜数。与此同时有效、便捷的心脏监测费用过于高昂,普通患者难以承受。为满足了患者以及医护工作者的高效、便捷的心脏监测需求,闻心研发出具有自主知识产权的可穿戴式心音心电监控设备。包括至少一个可穿戴无线人体特征数据采集及传输模块,一台 智能终端以及一个开放式云平台。团队源于美国硅谷,核心... (继续浏览)

致善

目录 ▪ 致善简介致善简介公司成立的初衷就是“科技xxx、管理高效”为指导思想,不断加快公司科研开发步伐,促进我国制造业转型升级及顺应我国高新技术产业发展规划的需要,我司虽属新生公司,但起点高、定位准,将生物技术和生命科学作为先导,涵盖医疗卫生、疾病治疗预防、氢动力能源、农业科技及生命健康等科研项目,研发各类氢分子发生装置,使氢分子医学充分应用在民生工程之上... (继续浏览)

阿克先生

目录 ▪ 阿克先生定位阿克先生定位只做卫生间xxxB的健康系统设备 解决了卫生间里xxx的二个痛点 商业模式成熟 千亿级空白市场 主要用户25-50岁家庭妇女, 以及公共卫生间业主或管理者。 阿克先生  ... (继续浏览)

雅素达电子科技

目录 ▪ 雅素达电子科技简介雅素达电子科技简介本公司著作权独特的非线性温度偏移及温度补偿方法能高精度的修正温度偏移及温度偏差。雅素达电子科技... (继续浏览)

全方位智能按摩床

目录 ▪ 全方位智能按摩床简介全方位智能按摩床简介xxx、在推拿按摩领域将与传统的按摩椅等相比,持联按摩床应用更广,舒适性更好,功能更强大,发挥作用更大,尤其是在医疗康复领域将发挥着重要作用,因此本项目产生的经济效益具有良好的持续性,在未来几年内都可以产生良好的经济效益;  第二、借助互联网进行布局,入驻各电商平台、众筹;以合作投放形式。如,... (继续浏览)