《Java 7 并发手册》(《Java 7 Concurrency Cookbook》)这本书里包含了超过60个展示Java多线程编程的实例。这本书里讲解了关于线程的很多主题,从初级到高级,有线程管理,例如创建、中断和监视线程,有通过Java 5的Executor框架来运行和调度线程,以及使用Java 7中最新的Fork/Jion框架来分发线程。
我最喜欢的是第3章,这里面展示了5种并发机制或者说是模式——“Semaphores”,“CountDownLatch”,“CyclicBarrier”,“Phaser”和“Exchanger”,以及如何使用这5种机制来解决现存的一些多线程问题。此外,在这些章节的末尾,令我惊讶的是,它居然还展示了怎么在Eclipse和NetBeans里测试Java的并发代码。
看看下面的章节介绍,你会知道从这本书里能够学到什么。
第1章 线程管理
开始的章节有很多有用的示例代码,它们展示了线程管理的一些基本内容。
学到的内容有:
- 如何创建,中断,休眠和恢复一个线程
- 如何编程实现一个守护线程
- 如何处理线程异常
- 如何对线程进行分组
第2章:基本的线程同步
通过线程同步来控制多个线程读写同一份数据,文件或者数据库(也就是共享资源)。
学到的内容有:
- 如何使用synchronized关键字来同步一个方法
- 如何使用Lock接口以及它的实现来同步一块代码
- 如何使用wait(),notify()和notifyAll()来实现单个或者多个条件的同步
第3章:线程同步工具类
这个章节展示了同步多线程的5种机制或者说是模式,以及它们各自可以解决的问题。
学到的内容有:
- Semaphores ——一个用来控制访问一个或者多个共享资源的计数器
- CountDownLatch——允许一个线程等待多个操作的终止
- CyclicBarrier——允许多个线程在一个同一个点进行同步
- Phaser ——控制被划分为多个阶段的并行任务的执行
- Exchanger ——提供一个供两个线程进行数据交换的点
第4章 Executor框架
如何使用Java 5里的Excutor框架——Executor,ThreadPoolExecutor等待。它很像一个调度器,可以让一个或者多个线程在指定的时间或者按照指定的时间间隔运行。
学到的内容有:
- 如何创建一个thread executor
- 如何延迟执行一个任务
- 如何周期执行一个任务
- 如何控制任务的结束和取消
第5章:Fork/Join框架
Java 7里的新Fork/Join框架 ( 推荐阅读ImportNew翻译的这篇相关文章《Java 7 Fork/Join 框架》 )
学到的内容有:
- Java 7里的Fork/Join框架是什么,以及一个简单的hello world示例
- 如何对划分的任何的执行结果进行合并
- 如何取消一个任务
第6章:并发的集合类
这里介绍了并发编程里使用到的Java集合类
学到的内容有:
- 什么是阻塞的和非阻塞的集合类
- 使用阻塞和非阻塞的线程安全列表的示例
- ConcurrentNaviagableMap示例
- 如何通过ThreadLocalRandom来产生并发的随机数
- 如何使用原子变量——例如AtomicLong,以及原子数组——例如,AtomicIntegerArray
第7章:自定义并发类
这个章节展示了如何自定义现存的并发类使得它能够符合你的需求。一般来说,你不需要这样做,不过知道总比不知道好。
学到的内容有:
- 实现一个基于优先级的Executor类
- 如何使用ThreadFactory
- 让自定义的任务运行在一个线程调度池和Fork/Join框架里
- 如何实现一个自定义的Lock类
- 如何实现你自己的原子类
第8章 :测试并发应用
这个章节展示了如何测试并发程序
学到的内容有:
- 如何监测Lock,Phaser,Executor框架和Fork/Join池
- 如何配置Eclilpse和NetBeans来对并发代码进行调试
- 如何用FindBugs来分析并发代码
总结
这本书里包含了很多易于操作的代码,并且每段代码都给出了很好的解释,不过第6章和第7章除外,因为这里的代码需要多年的并发编程经验才能够理解。对于初学者,想学习Java多线程的话,这本《Java 7并发手册》是最好的教材。对于有经验的开发者,你也可以把本书当作“Java 并发”的一个完整的参考手册。
这本书和经典的《Java并发编程实践》怎么样呢?我认为这两本书分别是面向不同等级的开发者的。恕我直言,经典的《Java并发编程实践》是供高级水平的开发者看的,它的一段代码片跟随好几页解说的方式确实很不错,不过它并不适合所有人。而且这本《Java 7并发手册》是合适于初级和中级开发者的,并且里面的例子简单易懂,而且你可以简单修改并且应用在你的项目里。