请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

这一节单例模式讲的很不合理啊

这一节单例模式讲的很不合理啊,且不说 double-checked 线程安全方式本来就不推荐使用(使用On Demand Holder),就算要使用,也需要在实例上加上 volatile关键字;后面举的netty里的单例,明明是饿汉模式,怎么就延迟加载了呢??

正在回答 回答被采纳积分+3

1回答

闪电侠 2018-07-17 19:53:35

感谢指正,这里确实要用到volite关键词,然后延迟加载,对于jvm来说,一个类只有在被使用到的时候才会加载class文件,包括初始化静态变量,如果没有使用到这个类,是不会进行初始化操作的

0 回复 有任何疑惑可以回复我~
  • 提问者 Ryan_hou #1
    类加载的时机与具体的jvm实现相关,可以是eager的(有其他类引用了该类就加载它),也可以是lazy的(在类初始化时才加载);我们这里讨论的是 lazy initialization 和 eager initialization,public static final ReadTimeoutException INSTANCE = new ReadTimeoutException(); // 这样写,当类加载时就会实例化该单例对象,属于 eager initialization   我理解的延迟初始化是,只有当真正需要使用到该类的单例对象时才进行对象初始化,而不是在类加载时就初始化好(我类加载后并不一定会使用该实例)。上面是我的理解
    回复 有任何疑惑可以回复我~ 2018-07-17 21:23:31
  • 闪电侠 回复 提问者 Ryan_hou #2
    嗯嗯,您的理解是对的,这一小节相对其他小节确实介绍得不太好,谢谢指正!
    回复 有任何疑惑可以回复我~ 2018-07-17 22:22:51
  • 提问者 Ryan_hou 回复 闪电侠 #3
    哈哈 这一节的水准确实和别的小节有差距,不过总体下来学到不少东西,感谢~
    回复 有任何疑惑可以回复我~ 2018-07-18 09:25:02
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信