小编cha*_* ro的帖子

正确实现按需初始化持有者习惯用法

我有两个版本的"初始化按需持有人成语":

  1. http://en.wikipedia.org/wiki/Initialization-on-demand_holder_idiom
  2. http://en.wikipedia.org/wiki/Singleton_pattern#The_solution_of_Bill_Pugh

上面的主要区别是第一个被宣布INSTANCE私有,但第二个被宣布INSTANCE公共.

请告诉我应该使用哪一个.


对不起,我没有发现在我的应用程序中使用privatepublic之间的区别:

public class Singleton {
    private int x;
    public int getX() {
        return x;
    }

    private Singleton () {}

    private static class LazyHolder {
        //both private and public works
        private static final Singleton INSTANCE = new Singleton();
    }

    public static Singleton getInstance() {
        return LazyHolder.INSTANCE;
    }
}
Run Code Online (Sandbox Code Playgroud)

我唯一要做的就是调用类似的东西Singleton.getInsance().getX(),因此两个版本都有效.因此,我想知道使用它们的情况.

java concurrency design-patterns

12
推荐指数
1
解决办法
1万
查看次数

Visual Studio 2010:关于"程序数据库管理器"的致命错误C1902

这是MSDN的一些描述

错误消息程序数据库管理器不匹配; 请检查您的安装程序数据库文件(.pdb)是使用比编译时找到的更新版本的mspdb80.dll创建的.

此错误通常表示mspdbsrv.exe或mspdbcore.dll缺失或与mspdb80.dll具有不同的版本.确保在系统上安装了匹配版本的mspdbsrv.exe,mspdbcore.dll和mspdb80.dll.

我想知道什么是"程序数据库管理器"?和"mspdbsrv.exe,mspdbcore.dll和mspdb80.dll"的关系是什么?

c++ visual-studio-2010

10
推荐指数
2
解决办法
8230
查看次数

在JDK 1.6和JDK 1.7中ConcurrentHashMap的不同`next`条目

在JDK 1.6中,Doug Lea final在该next领域之前使用.

static final class HashEntry<K,V> {
    final K key;
    final int hash;
    volatile V value;
    final HashEntry<K,V> next;
Run Code Online (Sandbox Code Playgroud)

而在JDK 1.7中,next字段前面是volatile.我还注意到在JDK 1.7中,该get方法采用getObjectVolatile读取value字段的方法,该字段具有易失性加载语义.

我不知道Doug Lea之前使用过什么final.如果正确性存在问题,那么如何volatile在JDK 1.7(也是JDK 1.8)中替换它?

编辑:

具体来说,我的问题是我们可以finalvolatileJDK 1.6的实现代替吗?

java concurrency hashmap concurrenthashmap java.util.concurrent

8
推荐指数
1
解决办法
412
查看次数

为什么不能使用String初始化StringBuilder对象?

StringBuilder sb = "asd";
Run Code Online (Sandbox Code Playgroud)

在Java中,这种说法显然是错误的.像eclipse这样的IDE会告诉你:

无法从String转换为StringBuilder

但是,操作员String可以初始化对象=.

我想知道一些与内存分配有关的原因.

java stringbuilder

7
推荐指数
2
解决办法
2074
查看次数