这一章还是比较简单。因为之前看过并发编程实战这本书的内容。如果需要完整了解并发,还是需要看下那本书。

66. 同步访问共享的可变数据

67. 避免过度同步

在同步区域内做尽量少的工作。例如调用外星方法以及引用可变对象都会造成线程不安全。

68. executor和task优先于线程

自己去通过Thread编写多线程任务是不太好的,因为要考虑很多细节。采用并发包中的ExecutorService来管理线程任务是最佳实践

69. 并发工具优先于wait和notify

并发操作,都优先使用并发包里面的工具和数据结构。

70. 线程安全性的文档化

提供一些线程安全相关的注解。在JAVA并发实战里面也有提及.详情可以查看JAVA并发编程读书笔记

71. 慎用延迟初始化

绝大部分情况都应该使用正常的初始化。

为了达到性能目标而进行延迟初始化有以下选择(P250):

  1. 实例域:双重检查模式
  2. 静态域:使用lazy initialization holder class idiom
  3. 对于可以接受重复初始化的实例域也可以考虑使用单重检查模式

72. 不要依赖于线程调度器

任何依赖于线程调度器来达到正确性或者性能要求的程序,很有可能是不可移植的。

不要依赖Thread.yield或者线程优先级(最不可移植特征)来控制线程调度,这种仅仅在测试期间,可以帮助来发现一些隐蔽的BUG。

72. 避免使用线程组

这玩意儿。。其实我没听过。继续保持这种状态,哈哈!