资深Java专家10年经验总结,全程案例式讲解,首本全面介绍Java多线程编程技术的专著
结合大量实例,全面讲解Java多线程编程中的并发访问、线程间通信、锁等最难突破的核心技术与应用实践
Java多线程无处不在,如服务器、数据库、应用。多线程可以有效提升计算和处理效率,大大提升吞吐量和可伸缩性,深得广大程序员和公司的青睐。很多人学习完JavaSE/JavaEE之后想往更深入的技术进行探索,比如对大数据、分布式、高并发类的专题进行攻克时,立即遇到针对java.lang包中线程类的学习,但线程类的学习并不像JDBC一样简单,学习曲线陡峭,多弯路与“坑”。要学习这些热点技术,Java多线程技术避无可避。而本书将引领读者拿下该“技术高地”。
本书有以下特点:
不留遗漏——全面覆盖Java语言多线程知识点;
直击要害——实战化案例精准定位技术细节;
学以至用——精要式演示确保开发/学习不脱节;
潜移默化——研磨式知识讲解参透技术要点;
提升效率——垂直式技术精解不绕弯路;
循序提升——渐进式知识点统排确保连贯。
前 言
第1章 Java多线程技能,
1.1 进程和多线程的概念及线程的优点
1.2 使用多线程
1.2.1 继承Thread类
1.2.2 实现Runnable接口
1.2.3 实例变量与线程安全
1.2.4 留意i——与System.out.println()的异常
1.3 currentThread()方法
1.4 isAlive()方法
1.5 sleep()方法
1.6 getId()方法
1.7 停止线程
1.7.1 停止不了的线程
1.7.2 判断线程是否是停止状态
1.7.3 能停止的线程——异常法
1.7.4 在沉睡中停止
1.7.5 能停止的线程——暴力停止
1.7.6 方法stop()与java.lang.ThreadDeath异常
1.7.7 释放锁的不良后果
1.7.8 使用return停止线程
1.8 暂停线程
1.8.1 suspend与resume方法的使用
1.8.2 suspend与resume方法的缺点——独占
1.8.3 suspend与resume方法的缺点——不同步
1.9 yield方法
1.10 线程的优先级
1.10.1 线程优先级的继承特性
1.10.2 优先级具有规则性
1.10.3 优先级具有随机性
1.10.4 看谁运行得快
1.11 守护线程
1.12 本章小结
第2章 对象及变量的并发访问
2.1 synchronized同步方法
2.1.1 方法内的变量为线程安全
2.1.2 实例变量非线程安全
2.1.3 多个对象多个锁
2.1.4 synchronized方法与锁对象
2.1.5 脏读
2.1.6 synchronized锁重入
2.1.7 出现异常,锁自动释放
2.1.8 同步不具有继承性
2.2 synchronized同步语句块
2.2.1 synchronized方法的弊端
2.2.2 synchronized同步代码块的使用
2.2.3 用同步代码块解决同步方法的弊端
2.2.4 一半异步,一半同步
2.2.5 synchronized代码块间的同步性
2.2.6 验证同步synchronized(this)代码块是锁定当前对象的
2.2.7 将任意对象作为对象监视器
2.2.8 细化验证3个结论
2.2.9 静态同步synchronized方法与synchronized(class)代码块
2.2.10 数据类型String的常量池特性
2.2.11 同步synchronized方法无限等待与解决
2.2.12 多线程的死锁
2.2.13 内置类与静态内置类
2.2.14 内置类与同步:实验1
2.2.15 内置类与同步:实验2
2.2.16 锁对象的改变
2.3 volatile关键字
2.3.1 关键字volatile与死循环
2.3.2 解决同步死循环
2.3.3 解决异步死循环
2.3.4 volatile非原子的特性
2.3.5 使用原子类进行i++操作
2.3.6 原子类也并不完全安全
2.3.7 synchronized代码块有volatile同步的功能
2.4 本章总结
第3章 线程间通信
3.1 等待/通知机制
3.1.1 不使用等待/通知机制实现线程间通信
3.1.2 什么是等待/通知机制
3.1.3 等待/通知机制的实现
3.1.4 方法wait()锁释放与notify()锁不释放
3.1.5 当interrupt方法遇到wait方法
3.1.6 只通知一个线程
3.1.7 唤醒所有线程
3.1.8 方法wait(long)的使用
3.1.9 通知过早
3.1.10 等待wait的条件发生变化
3.1.11 生产者/消费者模式实现
3.1.12 通过管道进行线程间通信:字节流
3.1.13 通过管道进行线程间通信:字符流
3.1.14 实战:等待/通知之交叉备份
3.2 方法join的使用
3.2.1 学习方法join前的铺垫
3.2.2 用join()方法来解决
3.2.3 方法join与异常
3.2.4 方法join(long)的使用
3.2.5 方法join(long)与sleep(long)的区别
3.2.6 方法join()后面的代码提前运行:出现意外
3.2.7 方法join()后面的代码提前运行:解释意外
3.3 类ThreadLocal的使用
3.3.1 方法get()与null
3.3.2 验证线程变量的隔离性
3.3.3 解决get()返回null问题
3.3.4 再次验证线程变量的隔离性
3.4 类InheritableThreadLocal的使用
3.4.1 值继承
3.4.2 值继承再修改
3.5 本章总结
第4章 Lock的使用
4.1 使用ReentrantLock类
4.1.1 使用ReentrantLock实现同步:测试1
4.1.2 使用ReentrantLock实现同步:测试2
4.1.3 使用Condition实现等待/通知错误用法与解决
4.1.4 正确使用Condition实现等待/通知
4.1.5 使用多个Condition实现通知部分线程:错误用法
4.1.6 使用多个Condition实现通知部分线程:正确用法
4.1.7 实现生产者/消费者模式:一对一交替打印
4.1.8 实现生产者/消费者模式:多对多交替打印
4.1.9 公平锁与非公平锁
4.1.10 方法getHoldCount()、getQueueLength()和getWaitQueueLength()的测试
4.1.11 方法hasQueuedThread()、hasQueuedThreads()和hasWaiters()的测试
4.1.12 方法isFair()、isHeldByCurrentThread()和isLocked()的测试
4.1.13 方法lockInterruptibly()、tryLock()和tryLock(long timeout,TimeUnit unit)的测试
4.1.14 方法awaitUninterruptibly()的使用
4.1.15 方法awaitUntil()的使用
4.1.16 使用Condition实现顺序执行
4.2 使用ReentrantReadWriteLock类
4.2.1 类ReentrantReadWriteLock的使用:读读共享
4.2.2 类ReentrantReadWriteLock的使用:写写互斥
4.2.3 类ReentrantReadWriteLock的使用:读写互斥
4.2.4 类ReentrantReadWriteLock的使用:写读互斥
4.3 本章总结
第5章 定时器Timer
5.1 定时器Timer的使用
5.1.1 方法schedule(TimerTask task, Date time)的测试
5.1.2 方法schedule(TimerTask task, Date firstTime, long period)的测试
5.1.3 方法schedule(TimerTask task, long delay)的测试
5.1.4 方法schedule(TimerTask task, long delay, long period)的测试
5.1.5 方法scheduleAtFixedRate(TimerTask task, Date firstTime, long period)的测试
5.2 本章总结
第6章 单例模式与多线程
6.1 立即加载/"饿汉模式"
6.2 延迟加载/"懒汉模式"
6.3 使用静态内置类实现单例模式
6.4 序列化与反序列化的单例模式实现
6.5 使用static代码块实现单例模式
6.6 使用enum枚举数据类型实现单例模式
6.7 完善使用enum枚举实现单例模式
6.8 本章总结
第7章 拾遗增补
7.1 线程的状态
7.1.1 验证NEW、RUNNABLE和TERMINATED
7.1.2 验证TIMED_WAITING
7.1.3 验证BLOCKED
7.1.4 验证WAITING
7.2 线程组
7.2.1 线程对象关联线程组:1级关联
7.2.2 线程对象关联线程组:多级关联
7.2.3 线程组自动归属特性
7.2.4 获取根线程组
7.2.5 线程组里加线程组
7.2.6 组内的线程批量停止
7.2.7 递归与非递归取得组内对象
7.3 使线程具有有序性
7.4 SimpleDateFormat非线程安全
7.4.1 出现异常
7.4.2 解决异常方法1
7.4.3 解决异常方法2
7.5 线程中出现异常的处理
7.6 线程组内处理异常
7.7 线程异常处理的传递
7.8 本章总结
《狂人日记(赵延年插图本)》内容简介:本书是一部鲁迅小说选集,收录鲁迅代表性小说十六篇,出自《呐喊》和《彷徨》两部小说集,
《新媒体跨界交互设计》内容简介:本书从传播媒介发展、网络互动、软硬件结合、可视化编程、体感交互技术、跨平台交互引擎六个方面
《企业级容器云架构开发指南》内容简介:本书由慧与大学组织,由慧与(中国)有限公司容器云项目组的人员完成,书籍内容的蓝本为慧
你是否好奇那些艺术家们的脑子里都想些什么?《手绘的创意日志》的作者珍妮弗·纽带领读者开始一场精神旅程,进入日志作者的个人
《工匠革命:制造业的精神与文化变迁》内容简介:本书从人类制造业的历史演化及其文化变迁出发,对工匠精神的起源、形成与发展进行
《黑客与画家(10万册纪念版)》内容简介:你无须改变太多,也能活出精彩一生。这是保罗给我们的心理安抚,同时他也用自己在世俗意
并行程序设计(第2版) 本书特色 本书系统介绍并行程序设计原理及应用。除介绍常用的一些算法范例,包括分治、流水、同步计算、主从及工作池,还介绍了一些常用的经典数...
《形式感+》内容简介:网页设计师从早年的综合性工作中分化出来,形成了相对独立的专业岗位,网页设计也不再是单纯的软件应用,它衍
《让孩子爱上学习》内容简介:本书整理了作者多年来将心理辅导应用于教育的实践经验,总结出家长促使孩子变成学霸必经的三个步骤,
东京字体指导俱乐部(TokyoTDC)最佳字体设计揭晓,本书收录了本次大奖所有奖项的作品。东京字体设计俱乐部成立于1987年,在今年
本书介绍了配色的基础知识与技巧,通过照片、广告等实例,为从初学者到专业设计师等不同水平的读者,提供了广泛、全面的引导。书
《动物直播间:地下城里的迷宫》内容简介:本书选择那些以善于建筑巢穴著称的动物作为主人公,让它们用直播的形式自己来述说自己的
交互式计算机图形学基于OPENGL的自顶向下方法(第5版)英文版 本书特色 《交互式计算机图形学——基于OpenGL的自顶向下方法》可作为计算机及相关专业本科生...
《从零开始做播客》内容简介:在本书中,您将会学习哪种设备在何种预算下最适合播客,哪种软件最适合录制,还有一些关于开发播客节
书名:完全手册:PHP网络开发详解作者:孙鹏程等编著来源:电子工业出版社出版时间:2007年07月ISBN:9787121046483定价:89元第1
聞名全球的「frogdesign」(青蛙設計)如何在經濟大衰退之際,還能締造破記錄營收。‧高科技設計超級巨星哈特姆.艾斯林格(青蛙設計
“非常优秀!这绝对是UI设计模式领域最好的书,也是近年来交互设计领域最好的新书之一。本书清楚、简洁、引人入胜,既包括基础知
《成为小作家》内容简介:这是一本教你创作自己故事的写作魔法宝典。里面有你能想到的、想不到的写作工具,是助你破解写作难题的基
《3G演进:HSPA与LTE(第2版)》是爱立信研究院研发人员的经验之谈,描述3G数字蜂窝系统如何演进成为先进的宽带移动接入技术,涉及3
模糊测度和模糊积分及在分类技术中的应用 内容简介 本书从模糊积分作为一种分类技术的角度巴以论述,内容涵盖了模糊测度与积分的基础知识,模糊积分作为一种分类器和模糊...