qq_18360395 2016-06-28 09:29 采纳率: 0%
浏览 1071

java关于HashSet的一点疑惑,请大神指点一下~~

 我在一个单例模式的测试中,把get到的对象放在HashSet中,利用Set集合的去重,来观察究竟生成的是否为一个实例,但结果却让我很不解,求大家指点,先把代码贴出来。

Singleton.java:

 package test;

public class Singleton {

    private static Singleton instance = null;
    // 记录执行了几次new Singleton
    private static int count = 0;

    private Singleton() {
        count++;
    }

    public static int getCount() {
        return count;
    }

    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

Test.java:

 package test;

import java.util.HashSet;
import java.util.Set;

public class Test {

    //创建HashSet结合
    private static Set<Singleton> set = new HashSet<Singleton>();

    public static void main(String[] args) {

        //创建实现Runnable接口的对象
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                Singleton instance = Singleton.getInstance();
                set.add(instance);
            }
        };

        //循环启动线程10000次
        for (int i = 0; i < 10000; i++) {
            new Thread(runnable).start();
        }

        //输出结果
        System.out.println("set.size() == " + set.size());
        System.out.println("set contains : " + set);
        System.out.println("Singleton.count == " + Singleton.getCount());

    }
}

输出结果很奇怪,

每次执行main方法后,输出的set.size()值都是不固定的,基本在1-5之内随机。

但直接控制台输出 set ,里边看到只有一个对象。

Singleton.getCount()方法的输出也永远是1。

不明白为什么第一个输出set.size是什么情况。

结果贴图出来:
执行结果

  • 写回答

3条回答 默认 最新

  • 程序员无名 2016-06-28 09:45
    关注
     public
    
    
    评论

报告相同问题?

悬赏问题

  • ¥35 平滑拟合曲线该如何生成
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站