为什么在java语言中DCL不成立?

匿名网友 匿名网友 发布于: 2016-01-07 00:00:00
阅读 127 收藏 0 点赞 0 评论 0

  • Java 构造对象不是原子操作:

1.先申请一块空内存

2.将其地址赋予 对象引用

3.在对象引用所指的地址之上构建对象,调用构造函数初始化

  • 很多人提供了很多方法来修复DCL,但是没有人能够成功
  • 行为正确的程序,但是增加了同步的负担

// Correct multithreaded version ,but synchronized every time!

class Foo {

private Helper helper = null;

public synchronized Helper getHelper() {

if (helper == null){

helper = new Helper();

}

return helper;

}

// other functions and members…

}

评论列表