A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李桐 高级黑马   /  2013-2-6 12:22  /  1384 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李桐 于 2013-2-6 19:09 编辑

问下大家,新建一个类,把这个类设计成单例模式,然后启用两个线程,在线程里调用这个类,那么这两个类里的实例是一个对象么...(小弟太菜,代码不会写,如果哪位大神会的话,最好附上代码...)

3 个回复

倒序浏览
class Singleton {

        private Singleton() {
        }

        private static Singleton singleton;

        public static Singleton getInstance() {

                if (singleton == null) {

                        singleton = new Singleton();

                }

                return singleton;

        }

}

public class SingletonTest extends Thread{
        private Singleton s;

        public static void main(String[] args) {
                // TODO Auto-generated method stub
                Thread.currentThread().setPriority(MIN_PRIORITY);
        SingletonTest s1=new SingletonTest();
        SingletonTest s2=new SingletonTest();
        s1.setPriority(MAX_PRIORITY);
        s2.setPriority(MAX_PRIORITY);
        System.out.println(s1.getSingleton()==s2.getSingleton());
        /*
         * 为了使主线程的打印语句在s1,s2执行run方法之后,我设定了线程执行的优先级。
         * 打印结果为true
         */
        }

        @Override
        public void run() {
                // TODO Auto-generated method stub
                s = Singleton.getInstance();
        }

        public Singleton getSingleton() {
                return s;
        }
}

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1

查看全部评分

回复 使用道具 举报
陈科宇 发表于 2013-2-6 12:50
class Singleton {

        private Singleton() {

貌似你的s1,s2没有启动,s1.getSingleton()==s2.getSingleton()是null==null所以是true
我启动试了一下 他们俩的确用的是同一个对象 是true 谢谢 学习了{:soso_e183:}
回复 使用道具 举报
李桐 发表于 2013-2-6 17:27
貌似你的s1,s2没有启动,s1.getSingleton()==s2.getSingleton()是null==null所以是true
我启动试了一下  ...

我很抱歉,忘了开启了。我再补上一点,如果要让主线程在其他线程之后执行,设置优先级并不是好的办法,应该是用join方法。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马