这一章还是比较简单。因为之前看过并发编程实战这本书的内容。如果需要完整了解并发,还是需要看下那本书。
66. 同步访问共享的可变数据
67. 避免过度同步
在同步区域内做尽量少的工作。例如调用外星方法以及引用可变对象都会造成线程不安全。
68. executor和task优先于线程
自己去通过Thread编写多线程任务是不太好的,因为要考虑很多细节。采用并发包中的ExecutorService来管理线程任务是最佳实践
69. 并发工具优先于wait和notify
并发操作,都优先使用并发包里面的工具和数据结构。
70. 线程安全性的文档化
提供一些线程安全相关的注解。在JAVA并发实战里面也有提及.详情可以查看JAVA并发编程读书笔记
71. 慎用延迟初始化
绝大部分情况都应该使用正常的初始化。
为了达到性能目标而进行延迟初始化有以下选择(P250):
- 实例域:双重检查模式
- 静态域:使用lazy initialization holder class idiom
- 对于可以接受重复初始化的实例域也可以考虑使用单重检查模式
72. 不要依赖于线程调度器
任何依赖于线程调度器来达到正确性或者性能要求的程序,很有可能是不可移植的。
不要依赖Thread.yield或者线程优先级(最不可移植特征)来控制线程调度,这种仅仅在测试期间,可以帮助来发现一些隐蔽的BUG。
72. 避免使用线程组
这玩意儿。。其实我没听过。继续保持这种状态,哈哈!