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

当多个线程共享可变数据的时候,每个读或者写数据的线程都必须执行同步。 如果没有同步,就无法保证一个线程所做的修改可以被另一个线程获知

79. 避免过度同步

过度同步导致的问题:
  • 性能降低
  • 死锁
  • 不确定的行为
    要尽可能将同步区字段内部的工作量限制到最少

80. executor、task和stream优先于线程

框架提供的相应API能够便利执行和管理的线程任务,不需要再编写额外的代码去处理

81. 并发工具优于 wait 和 notify

工具总是优于直接编码

82. 文档应包含线程安全属性

83. 谨慎使用延迟初始化

延迟初始化的最佳建议是「除非需要,否则不要这样做」

84. 不要依赖线程调度器

任何依赖线程调度器来保证正确性或性能的程序都可能是不可移植的;
编写健壮、响应快、可移植程序的最佳方法是确保可运行线程的平均数量不显著大于处理器的数量。这使得线程调度器几乎没有选择:它只运行可运行线程,直到它们不再可运行为止