《Java线程编程》PDF下载

  • 购买积分:15 如何计算积分?
  • 作  者:(美)Paul Hyde著;周良忠译
  • 出 版 社:北京:人民邮电出版社
  • 出版年份:2003
  • ISBN:7115117918
  • 页数:454 页
图书介绍:本书以丰富的实例、由浅至深的方式全面讲解如何用Java进行多线程编程。本书可以帮助具有一定Java基本编程知识的程序员学习多线程编程。

第一部分 线程 3

第1章 线程简介 3

1.1 什么是线程 4

1.2 为什么使用多线程 4

1.2.1 与用户的更佳交互 4

1.2.2 同步动作的模拟 5

1.2.3 利用多处理器 5

1.2.4 等待缓慢I/O操作时完成其他任务 5

1.2.5 简化对象模型 6

1.3 不宜采用多线程的场合 7

1.4 Java的内置线程支持 7

1.5 易于起步,难以掌握 7

第2章 一个简单的双线程实例 9

2.1 扩展java.lang.Thread类 10

2.2 覆盖run()方法 11

2.3 创建新线程 12

2.4 综合运用 13

2.5 小结 14

第3章 创建和启动线程 15

3.1 使用Thread.currentThread() 16

3.2 线程命名:getName()和setName() 18

3.2.1 使用getName() 18

3.2.2 使用setName() 21

3.3 线程构造函数 22

3.4 激活线程:start()和isAlive() 24

3.5 使用Thread.sleép() 26

3.6 小结 28

第4章 实现Runnable接口与扩展Thread类 30

4.1 可视定时器图形组件 31

4.2 能扩展Thread和JComponent吗 37

4.3 接口java.lang.Runnable 38

4.4 把Runnable对象传递给Thread的构造函数 38

4.5 修改SecondCounter来使用Runnable 39

4.6 检查SecondCounter的准确性 45

4.7 提高SecondCounter的准确性 49

4.8 小结 54

第5章 完美终止线程 55

5.1 中断线程:interrupt() 56

5.1.2 待决中断 56

5.1.1 中断休眠线程 58

5.1.3 使用isInterrupted() 59

5.1.4 使用Thread.interrupted() 60

5.1.5 使用InterruptedException 61

5.2.1 使用淘汰的方法suspend()和resume() 63

5.2 挂起和恢复线程执行 63

5.2.2 在不恰当的时候挂起 67

5.2.3 不使用淘汰方法实现挂起和恢复 70

5.3 终止线程 74

5.3.1 使用淘汰的方法stop() 74

5.3.2 取代stop() 76

5.4 stop()、suspend()和resume()的最佳替代 78

5.5 守护线程 84

5.6 小结 86

第6章 线程优先化 87

6.1 系统线程优先级 88

6.2 线程优先级常量 89

6.2.1 Thread.MAX_PRIORITY 89

6.2.2 Thread.MIN_PRIORITY 89

6.2.3 Thread.NORM_PRIORITY 89

6.3 判断当前优先级:getPriority() 89

6.4 更改线程的优先级:setPriority() 91

6.5 线程状态 94

6.7 自愿放弃处理器:Thread.yield() 96

6.6 优先级和规划 96

6.8 线程规划情形 102

6.8.1 情形一:一个高优先级线程独占处理器 102

6.8.2 情形二:所有高优先级线程独占处理器 102

6.8.3 情形三:所有线程均获得一定的处理器时间 102

6.9 小结 103

第7章 并发访问对象和变量 104

7.1 易变成员变量修饰符 105

7.2.1 两个线程同时位于一个对象的同一个方法中 110

7.2 同步方法修饰符 110

7.2.2 同一时刻一个线程 112

7.2.3 两个线程,两个对象 115

7.2.4 避免对象的意外崩溃 117

7.2.5 对象处于不一致状态时,推迟对它的访问 121

7.3 同步语句块 126

7.3.1 减少持有锁的时间 126

7.3.2 锁定任意对象,而非仅仅锁定当前对象 127

7.3.3 把向量内容安全地复制到数组 128

7.4 静态同步方法 130

7.5 在同步语句中使用类级别锁 134

7.6 同步化和集合API 136

7.6.1 封装集合,使之同步化 136

7.6.2 安全地把列表中的内容复制到数组 137

7.6.3 安全遍历集合元素 139

7.7 死锁 141

7.9 小结 145

7.8 加速并发访问 145

第8章 线程间通信 147

8.1 线程间通信的必要性 148

8.2 等待/通知机制 148

8.2.1 最小规模的等待/通知 148

8.2.2 典型等待/通知 150

8.2.3 运用同步方法的等待/通知 151

8.3.3 wait() 153

8.3.2 notifyAll() 153

8.3.1 notify() 153

8.3 用于等待/通知的对象API 153

8.3.4 wait(long) 154

8.3.5 wait(long,int) 154

8.4 何时使用notifyAll()代替notify() 154

8.5 遗漏通知 155

8.5.1 MissedNotify 155

8.5.2 MissedNotifyFix 159

8.6 早期通知 163

8.6.1 EarlyNotify 164

8.6.2 EarlyNotifyFix 167

8.7 示例CubbyHole 171

8.8 使用join()等待线程的消亡 177

8.8.1 join() 177

8.8.2 join(long) 177

8.8.3 join(long,int) 177

8.8.4 JoinDemo 178

8.9 使用管道在线程间流动数据 181

8.9.1 PipedBytes 182

8.9.2 PipedCharacters 185

8.10 使用ThreadLocal和InheritableThreadLocal 188

8.10.1 ThreadLocal API 189

8.10.2 ThreadID 189

8.10.3 InheritableThreadLocal API 192

8.10.4 InheritableThreadID 192

8.11 小结 198

第9章 线程和Swing 199

9.1 为什么Swing工具包不是多线程安全 200

9.2 使用SwingUtilities.invokeAndWait() 201

9.3 使用SwingUtilities.invokeLater() 204

9.4 使用SwingUtilities.isEventDispatchThread() 207

9.5 何时不需要invokeAndWait()和invokeLater() 207

9.6 在GUI设置中使用工作线程的必需性 208

9.7 使用工作线程减轻事件线程的负担 213

9.8 在自定义组件中滚动文本 220

9.9 动画显示一系列图像 225

9.10 在JLabel上显示流逝的时间 229

9.11 在容器内浮动组件 233

9.12 小结 238

第10章 线程组 239

10.1 什么是线程组 240

10.2 使用getParent() 241

10.3 查找线程组的子组 241

10.4 使用Thread的getThreadGroup()方法 242

10.5 查找线程组中的所有线程 242

10.6 理解线程组的安全性 242

10.10 类ThreadViewer 243

10.9 淘汰的方法:stop()、suspend()和resume() 243

10.7 使用setMaxPriority()和getMaxPriority() 243

10.8 使用interrupt() 243

10.11 小结 252

第二部分 技术 255

第11章 自运行对象 255

11.1 简单自运行类 256

11.2 使用内部类来隐藏run() 259

11.3 要考虑的额外功能 261

11.4 小结 267

第12章 异常回调 268

12.1 ExceptionListener接口 269

12.2 支持ExceptionListener的辅助方法 269

12.3 小结 276

第13章 线程池 277

13.1 线程池的好处 278

13.2 线程池的考虑与开销 278

13.3 泛型线程池:ThreadPool 279

13.4 专门工作线程池:HttpServer 288

13.4.1 类HttpServer 289

13.4.2 类HttpWorker 296

13.4.3 服务文件示例 305

13.4.4 用3个工作线程运行HttpServer 307

13.4.5 用10个工作线程来运行HttpServer 309

13.5 小结 310

第14章 等待完全超时 311

14.1 意外提前返回 312

14.2 判断是否应当再次调用wait() 315

14.3 通用等待-直到模式 319

14.4 小结 325

第15章 摆脱阻塞I/O状态的束缚 326

15.1 read()方法忽略中断和终止请求 327

15.2 关闭流来摆脱阻塞状态 329

15.2.1 类CalcServer与摆脱阻塞的accept() 330

15.2.2 类CalcWorker与摆脱阻塞的read() 333

15.2.3 类CalcClient 336

15.2.4 运行CalcClient的输出 337

15.3 被中断时抛出InterruptedIOException 338

15.3.1 类ThreadedInputStream 338

15.3.2 类BufferedThreadedInputStream 347

15.4 针对可中断I/O使用BufferedThreadedInputStream 349

15.5 小结 354

第16章 SureStop的运用 356

16.1 使用SureStop的原则 357

16.2 SureStop类 357

16.3 使用SureStopVerbose的分析 363

16.4 用SureStopDemo演示SureStop的工作方式 369

16.5 小结 374

第17章 类BooleanLock的运用 375

17.1 背景 376

17.2 类BooleanLock 376

17.3 使用BooleanLock在线程间发送信号 380

17.4 避免阻塞于同步 382

17.4.1 SyncBlock 382

17.4.2 InterruptibleSyncBlock 385

17.5 使用TransitionDetector检测Value的短暂变化 388

17.6 小结 394

第18章 先进先出(FIFO)队列 395

18.1 FIFO队列如何工作 396

18.2 用数组实现FIFO 397

18.3 用Java的简单实现:SimpleObjectFIFO 399

18.4 对象引用的一个扩展FIFO队列:ObjectFIFO 405

18.5 字节的FIFO队列:ByteFIFO 419

18.6 小结 432

第三部分 附录 435

附录A Thread API 435

成员变量 436

Thread.MAX_PRIORITY 436

Thread.MIN_PRIORITY 436

Thread.NORM_PRIORITY 436

Thread(Runnable,String) 437

Thread(ThreadGroup,Runnable) 437

Thread(ThreadGroup,String) 437

构造函数 437

Thread(ThreadGroup,Runnable,String) 437

静态方法 438

Thread.currentThread() 438

Thread.activeCount() 438

Thread.dumpStack() 438

Thread() 438

Thread(String) 438

Thread(Runnable) 438

Thread.enumerate() 439

Thread.interrupted() 439

Thread.sleep(long) 439

Thread.sleep(long,int) 439

Thread.yield() 439

getThreadGroup() 440

getPriority() 440

getName() 440

destroy() 440

getContextClassLoader() 440

checkAccess() 440

实例方法 440

interrupt() 441

isAlive() 441

isDaemon() 441

isInterrupted() 441

join() 441

join(long) 441

join(long,int) 442

run() 442

setContextClassLoader(ClassLoader) 442

setDaemon(boolean) 442

setName(String) 442

resume() 443

countStackFrames() 443

被淘汰的方法 443

start() 443

setPriority(int) 443

toString() 443

stop() 444

stop(Throwable) 444

suspend() 444

附录B ThreadGroup API 445

ThreadGroup(ThreadGroup,String) 446

ThreadGroup(String) 446

构造函数 446

实例方法 447

activeCount() 447

activeGroupCount() 447

checkAccess() 447

destroy() 447

enumerate(Thread[],boolean) 447

getParent() 448

getName() 448

getMaxPriority() 448

enumerate(ThreadGroup[]) 448

enumerate(Thread[]) 448

enumerate(ThreadGroup[],boolean) 448

list() 449

setDaemon(boolean) 449

parentOf(ThreadGroup) 449

setMaxPriority(int) 449

isDestroyed() 449

isDaemon() 449

interrupt() 449

toString() 450

uncaughtException(Thread,Throwable) 450

被淘汰的方法 450

allowThreadSuspension(boolean) 450

resume() 450

stop() 450

suspend() 451

索引 452