采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
这一节单例模式讲的很不合理啊,且不说 double-checked 线程安全方式本来就不推荐使用(使用On Demand Holder),就算要使用,也需要在实例上加上 volatile关键字;后面举的netty里的单例,明明是饿汉模式,怎么就延迟加载了呢??
感谢指正,这里确实要用到volite关键词,然后延迟加载,对于jvm来说,一个类只有在被使用到的时候才会加载class文件,包括初始化静态变量,如果没有使用到这个类,是不会进行初始化操作的
类加载的时机与具体的jvm实现相关,可以是eager的(有其他类引用了该类就加载它),也可以是lazy的(在类初始化时才加载);我们这里讨论的是 lazy initialization 和 eager initialization,public static final ReadTimeoutException INSTANCE = new ReadTimeoutException(); // 这样写,当类加载时就会实例化该单例对象,属于 eager initialization 我理解的延迟初始化是,只有当真正需要使用到该类的单例对象时才进行对象初始化,而不是在类加载时就初始化好(我类加载后并不一定会使用该实例)。上面是我的理解
嗯嗯,您的理解是对的,这一小节相对其他小节确实介绍得不太好,谢谢指正!
哈哈 这一节的水准确实和别的小节有差距,不过总体下来学到不少东西,感谢~
登录后可查看更多问答,登录/注册
解析netty各大组件细节,百万级性能调优,设计模式实际运用
1.9k 6
1.4k 6
1.1k 6
994 5
1.2k 5