首页 新闻 赞助 找找看

java 单例问题

0
悬赏园豆:10 [待解决问题]

用上面的 代码 实现 java单例 其实是有问题的。由于JVM可能有指令重排序问题,所以在 new MyClass();调用的时候有可能类未初始化,其它线程就拿到了这个Instance未初始化完成的对象。我的问题是如果将代码改为注释掉的那两行是否就可以避免这个问题?

Rod_zhu的主页 Rod_zhu | 初学一级 | 园豆:173
提问于:2016-04-08 09:32
< >
分享
所有回答(4)
0

 

可以。

Launcher | 园豆:45045 (高人七级) | 2016-04-08 09:36
1

你描述的这种情况会出现吗 ?  其他线程应该也只能通过 GetInstance来获得instance吧, 返回的必然是初始化完成的呀。 

藏红 | 园豆:209 (菜鸟二级) | 2016-04-09 12:11
0

指令重排序是指对一块区域内的代码,jvm有可能把比较耗时的操作放在后面执行,单线程的话,对执行结果不会有影响.多线程中synchronized 是可以防止指令重排的.

QianLinFeng | 园豆:202 (菜鸟二级) | 2016-04-19 09:21
0

上面创建Object类型的变量是做什么用的

ly.never.stop | 园豆:202 (菜鸟二级) | 2017-10-12 10:18
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册