第83条 慎用延迟初始化
延迟初始化降低了初始化类或者创建实例的开销,却增加了访问被延迟初始化的域的开销
在大多数情况下,正常的初始化要优先于延迟初始化
-
如果出于性能的考虑而需要对静态域使用延迟初始化,就使用 lazy initialization holder class 用法
private static class FieldHolder { static final FieldType field = computeFieldValue(); } private static FieldType getField() { return FieldHolder.field; }
思考
- 延迟初始化有点像单例模式。目前来看最推荐的实现单例模式的方法就是使用枚举。当然全局来考虑的话,最优的方式还是直接正常初始化类比较好。如果非要使用延迟初始化,可以考虑使用枚举
第84条 不要依赖于线程调度器
- 任何依赖于线程调度器来达到正确性或者性能要求的程序,很有可能都是不可移植的
- 编写健壮,响应迅速的可移植程序的最佳方法是确保可运行线程的平均数量不会明显大于处理器数量
- 如果线程没有在做有意义的工作,就不应该运行
- 线程优先级是 Java 平台上最不可移植的特征了
思考
- 依赖线程调度器就是在依赖JVM,这其实是很容易出问题的,一般也不会有人这么用