Java多线程编程核心技术

Java多线程编程核心技术

暂无评价综合评分的显示会考虑用户真实性等多项因素,每部作品出现综合评分的时间不定。
免费试读

作品简介

资深Java专家10年经验总结,全程案例式讲解,首本全面介绍Java多线程编程技术的专著

结合大量实例,全面讲解Java多线程编程中的并发访问、线程间通信、锁等最难突破的核心技术与应用实践。

作者:高洪岩

作品目录

  1. 前言
  2. 第1章 Java多线程技能
  3. 1.1 进程和多线程的概念及线程的优点
  4. 1.2 使用多线程
  5. 1.2.1 继承Thread类
  6. 1.2.2 实现Runnable接口
  7. 1.2.3 实例变量与线程安全
  8. 1.2.4 留意i--与System.out.println()的异常
  9. 1.3 currentThread()方法
  10. 1.4 isAlive()方法
  11. 1.5 sleep()方法
  12. 1.6 getId()方法
  13. 1.7 停止线程
  14. 1.7.1 停止不了的线程
  15. 1.7.2 判断线程是否是停止状态
  16. 1.7.3 能停止的线程——异常法
  17. 1.7.4 在沉睡中停止
  18. 1.7.5 能停止的线程——暴力停止
  19. 1.7.6 方法stop()与java.lang.ThreadDeath异常
  20. 1.7.7 释放锁的不良后果
  21. 1.7.8 使用return停止线程
  22. 1.8 暂停线程
  23. 1.8.1 suspend与resume方法的使用
  24. 1.8.2 suspend与resume方法的缺点——独占
  25. 1.8.3 suspend与resume方法的缺点——不同步
  26. 1.9 yield方法
  27. 1.10 线程的优先级
  28. 1.10.1 线程优先级的继承特性
  29. 1.10.2 优先级具有规则性
  30. 1.10.3 优先级具有随机性
  31. 1.10.4 看谁运行得快
  32. 1.11 守护线程
  33. 1.12 本章小结
  34. 第2章 对象及变量的并发访问
  35. 2.1 synchronized同步方法
  36. 2.1.1 方法内的变量为线程安全
  37. 2.1.2 实例变量非线程安全
  38. 2.1.3 多个对象多个锁
  39. 2.1.4 synchronized方法与锁对象
  40. 2.1.5 脏读
  41. 2.1.6 synchronized锁重入
  42. 2.1.7 出现异常,锁自动释放
  43. 2.1.8 同步不具有继承性
  44. 2.2 synchronized同步语句块
  45. 2.2.1 synchronized方法的弊端
  46. 2.2.2 synchronized同步代码块的使用
  47. 2.2.3 用同步代码块解决同步方法的弊端
  48. 2.2.4 一半异步,一半同步
  49. 2.2.5 synchronized代码块间的同步性
  50. 2.2.6 验证同步synchronized(this)代码块是锁定当前对象的
  51. 2.2.7 将任意对象作为对象监视器
  52. 2.2.8 细化验证3个结论
  53. 2.2.9 静态同步synchronized方法与synchronized(class)代码块
  54. 2.2.10 数据类型String的常量池特性
  55. 2.2.11 同步synchronized方法无限等待与解决
  56. 2.2.12 多线程的死锁
  57. 2.2.13 内置类与静态内置类
  58. 2.2.14 内置类与同步:实验1
  59. 2.2.15 内置类与同步:实验2
  60. 2.2.16 锁对象的改变
  61. 2.3 volatile关键字
  62. 2.3.1 关键字volatile与死循环
  63. 2.3.2 解决同步死循环
  64. 2.3.3 解决异步死循环
  65. 2.3.4 volatile非原子的特性
  66. 2.3.5 使用原子类进行i++操作
  67. 2.3.6 原子类也并不完全安全
  68. 2.3.7 synchronized代码块有volatile同步的功能
  69. 2.4 本章总结
  70. 第3章 线程间通信
  71. 3.1 等待/通知机制
  72. 3.1.1 不使用等待/通知机制实现线程间通信
  73. 3.1.2 什么是等待/通知机制
  74. 3.1.3 等待/通知机制的实现
  75. 3.1.4 方法wait()锁释放与notify()锁不释放
  76. 3.1.5 当interrupt方法遇到wait方法
  77. 3.1.6 只通知一个线程
  78. 3.1.7 唤醒所有线程
  79. 3.1.8 方法wait(long)的使用
  80. 3.1.9 通知过早
  81. 3.1.10 等待wait的条件发生变化
  82. 3.1.11 生产者/消费者模式实现
  83. 3.1.12 通过管道进行线程间通信:字节流
  84. 3.1.13 通过管道进行线程间通信:字符流
  85. 3.1.14 实战:等待/通知之交叉备份
  86. 3.2 方法join的使用
  87. 3.2.1 学习方法join前的铺垫
  88. 3.2.2 用join()方法来解决
  89. 3.2.3 方法join与异常
  90. 3.2.4 方法join(long)的使用
  91. 3.2.5 方法join(long)与sleep(long)的区别
  92. 3.2.6 方法join()后面的代码提前运行:出现意外
  93. 3.2.7 方法join()后面的代码提前运行:解释意外
  94. 3.3 类ThreadLocal的使用
  95. 3.3.1 方法get()与null
  96. 3.3.2 验证线程变量的隔离性
  97. 3.3.3 解决get()返回null问题
  98. 3.3.4 再次验证线程变量的隔离性
  99. 3.4 类InheritableThreadLocal的使用
  100. 3.4.1 值继承
  101. 3.4.2 值继承再修改
  102. 3.5 本章总结
  103. 第4章 Lock的使用
  104. 4.1 使用ReentrantLock类
  105. 4.1.1 使用ReentrantLock实现同步:测试1
  106. 4.1.2 使用ReentrantLock实现同步:测试2
  107. 4.1.3 使用Condition实现等待/通知:错误用法与解决
  108. 4.1.4 正确使用Condition实现等待/通知
  109. 4.1.5 使用多个Condition实现通知部分线程:错误用法
  110. 4.1.6 使用多个Condition实现通知部分线程:正确用法
  111. 4.1.7 实现生产者/消费者模式:一对一交替打印
  112. 4.1.8 实现生产者/消费者模式:多对多交替打印
  113. 4.1.9 公平锁与非公平锁
  114. 4.1.10 方法getHoldCount()、getQueueLength()和getWaitQueueLength()的测试
  115. 4.1.11 方法hasQueuedThread()、hasQueuedThreads()和hasWaiters()的测试
  116. 4.1.12 方法isFair()、isHeldByCurrentThread()和isLocked()的测试
  117. 4.1.13 方法lockInterruptibly()、tryLock()和tryLock(long timeout,TimeUnit unit)的测试
  118. 4.1.14 方法awaitUninterruptibly()的使用
  119. 4.1.15 方法awaitUntil()的使用
  120. 4.1.16 使用Condition实现顺序执行
  121. 4.2 使用ReentrantReadWriteLock类
  122. 4.2.1 类ReentrantReadWriteLock的使用:读读共享
  123. 4.2.2 类ReentrantReadWriteLock的使用:写写互斥
  124. 4.2.3 类ReentrantReadWriteLock的使用:读写互斥
  125. 4.2.4 类ReentrantReadWriteLock的使用:写读互斥
  126. 4.3 本章总结
  127. 第5章 定时器Timer
  128. 5.1 定时器Timer的使用
  129. 5.1.1 方法schedule(TimerTask task,Date time)的测试
  130. 5.1.2 方法schedule(TimerTask task,Date firstTime,long period)的测试
  131. 5.1.3 方法schedule(TimerTask task,long delay)的测试
  132. 5.1.4 方法schedule(TimerTask task,long delay,long period)的测试
  133. 5.1.5 方法scheduleAtFixedRate(TimerTask task,Date firstTime,long period)的测试
  134. 5.2 本章总结
  135. 第6章 单例模式与多线程
  136. 6.1 立即加载/“饿汉模式”
  137. 6.2 延迟加载/“懒汉模式”
  138. 6.3 使用静态内置类实现单例模式
  139. 6.4 序列化与反序列化的单例模式实现
  140. 6.5 使用static代码块实现单例模式
  141. 6.6 使用enum枚举数据类型实现单例模式
  142. 6.7 完善使用enum枚举实现单例模式
  143. 6.8 本章总结
  144. 第7章 拾遗增补
  145. 7.1 线程的状态
  146. 7.1.1 验证NEW、RUNNABLE和TERMINATED
  147. 7.1.2 验证TIMED_WAITING
  148. 7.1.3 验证BLOCKED
  149. 7.1.4 验证WAITING
  150. 7.2 线程组
  151. 7.2.1 线程对象关联线程组:1级关联
  152. 7.2.2 线程对象关联线程组:多级关联
  153. 7.2.3 线程组自动归属特性
  154. 7.2.4 获取根线程组
  155. 7.2.5 线程组里加线程组
  156. 7.2.6 组内的线程批量停止
  157. 7.2.7 递归与非递归取得组内对象
  158. 7.3 使线程具有有序性
  159. 7.4 SimpleDateFormat非线程安全
  160. 7.4.1 出现异常
  161. 7.4.2 解决异常方法1
  162. 7.4.3 解决异常方法2
  163. 7.5 线程中出现异常的处理
  164. 7.6 线程组内处理异常
  165. 7.7 线程异常处理的传递
  166. 7.8 本章总结
载入中

热门划线

  1. 关键字volatile的作用是强制从公共堆栈中取得变量的值,而不是从线程私有数据栈中取得变量的值。4 人
  2. 在调用wait()之前,线程必须获得该对象的对象级别锁,即只能在同步方法或同步块中调用wait()方法4 人
  3. synchronized可以在任意对象及方法上加锁,而加锁的这段代码称为“互斥区”或“临界区”。3 人
  4. 不过还是建议使用“抛异常”的方法来实现线程的停止,因为在catch块中还可以将异常向上抛,使线程停止的事件得以传播。3 人
  5. yield()方法的作用是放弃当前的CPU资源,将它让给其他的任务去占用CPU执行时间。但放弃的时间不确定,有可能刚刚放弃,马上又获得CPU时间片。3 人
  6. 当一个线程执行的代码出现异常时,其所持有的锁会自动释放。3 人
  7. 当两个并发线程访问同一个对象object中的synchronized(this)同步代码块时,一段时间内只能有一个线程被执行,另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。3 人
  8. 在使用同步synchronized(this)代码块时需要注意的是,当一个线程访问object的一个synchronized(this)同步代码块时,其他线程对同一个object中所有其他synchronized(this)同步代码块的访问将被阻塞,这说明synchronized使用的“对象监视器”是一个。3 人
  9. 多个线程调用同一个对象中的不同名称的synchronized同步方法或synchronized(this)同步代码块时,调用的效果就是按顺序执行,也就是同步的,阻塞的。3 人
  10. 锁非this对象具有一定的优点:如果在一个类中有很多个synchronized方法,这时虽然能实现同步,但会受到阻塞,所以影响运行效率;但如果使用同步代码块锁非this对象,则synchronized(非this)代码块中的程序与同步方法是异步的,不与其他锁this同步方法争抢this锁,则可大大提高运行效率。3 人

喜欢这本书的人也喜欢