更新时间:2022-01-07 14:45:26
封面
版权信息
作者简介
前言
第1章 Java多线程技能
1.1 进程和线程的定义及多线程的优点
1.2 使用多线程
1.2.1 继承Thread类
1.2.2 使用常见的3个命令分析线程的信息
1.2.3 线程随机性的展现
1.2.4 执行start()的顺序不代表执行run()的顺序
1.2.5 实现Runnable接口
1.2.6 使用Runnable接口实现多线程的优点
1.2.7 public Thread(Runnable target)中的target参数
1.2.8 实例变量共享导致的“非线程安全”问题与相应的解决方案
1.2.9 Servlet技术也会引起“非线程安全”问题
1.2.10 留意i--与System.out.println()出现的“非线程安全”问题
1.2.11 方法run()被JVM所调用
1.3 方法currentThread()
1.4 方法isAlive()
1.5 方法sleep(long millis)
1.6 方法sleep(long millis int nanos)
1.7 方法StackTraceElement[] getStackTrace()
1.8 方法static void dumpStack()
1.9 方法Map<Thread StackTraceElement[]> getAllStackTraces()
1.10 方法getId()
1.11 停止线程
1.11.1 停止不了的线程
1.11.2 判断线程是不是停止状态
1.11.3 清除中断状态的使用场景
1.11.4 能停止的线程——异常法
1.11.5 在sleep状态下停止
1.11.6 使用stop()暴力停止线程
1.11.7 方法stop()与java.lang.ThreadDeath异常
1.11.8 使用stop()释放锁导致数据结果不一致
1.11.9 使用return;语句停止线程的缺点及相应的解决方案
1.12 暂停线程
1.12.1 方法suspend()与resume()的使用
1.12.2 方法suspend()与resume()的缺点——独占
1.12.3 方法suspend()与resume()的缺点——数据不完整
1.12.4 使用LockSupport类实现线程暂停与恢复
1.13 方法yield()
1.14 线程的优先级
1.14.1 线程优先级的继承特性
1.14.2 线程优先级的规律性
1.14.3 线程优先级的随机性
1.14.4 看谁跑得快
1.15 守护线程
1.16 并发与并行
1.17 同步与异步
1.18 多核CPU不一定比单核CPU运行快
1.19 本章小结
第2章 对象及变量的并发访问
2.1 synchronized同步方法
2.1.1 方法内的变量是线程安全的
2.1.2 实例变量“非线程安全”问题及解决方案
2.1.3 同步synchronized在字节码指令中的原理
2.1.4 多个对象多个锁
2.1.5 synchronized方法将对象作为锁
2.1.6 脏读与解决
2.1.7 synchronized锁重入
2.1.8 继承环境下的锁重入
2.1.9 出现异常,锁自动释放
2.1.10 非同步方法:不使用synchronized重写方法
2.2 synchronized同步语句块
2.2.1 synchronized方法的弊端
2.2.2 synchronized同步代码块的使用
2.2.3 用同步代码块解决同步方法的弊端
2.2.4 一半异步,一半同步
2.2.5 synchronized代码块间的同步性
2.2.6 方法println()也是同步的
2.2.7 验证synchronized(this)同步代码块是锁定当前对象的
2.2.8 将任意对象作为锁
2.2.9 多个锁就是异步执行
2.2.10 验证方法被调用是随机的
2.2.11 不同步导致的逻辑错误与解决方案
2.2.12 细化验证3个结论
2.2.13 类对象的单例性
2.2.14 静态同步:synchronized方法与synchronized(class)代码块
2.2.15 同步synchronized方法可以对类的所有对象实例起作用
2.2.16 同步synchronized(class)代码块可以对类的所有对象实例起作用
2.2.17 String常量池特性与同步问题
2.2.18 synchronized方法无限等待问题与解决方案
2.2.19 多线程的死锁
2.2.20 内置类与静态内置类
2.2.21 内置类与同步:实验1
2.2.22 内置类与同步:实验2
2.2.23 锁对象改变导致异步执行
2.2.24 锁对象不改变依然是同步执行
2.2.25 同步写法案例比较
2.2.26 方法holdsLock(Object obj)的使用
2.2.27 临界区
2.3 volatile关键字
2.3.1 可见性的测试
2.3.2 原子性与非原子性的测试
2.3.3 禁止代码重排序的测试
2.4 本章小结
第3章 线程间通信
3.1 wait/notify机制
3.1.1 不使用wait/notify机制进行通信的缺点