黑马程序员技术交流社区

标题: 线程相关的! [打印本页]

作者: 李桐    时间: 2013-2-6 12:22
标题: 线程相关的!
本帖最后由 李桐 于 2013-2-6 19:09 编辑

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

作者: 陈科宇    时间: 2013-2-6 12:50
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;
        }
}

作者: 李桐    时间: 2013-2-6 17:27
陈科宇 发表于 2013-2-6 12:50
class Singleton {

        private Singleton() {

貌似你的s1,s2没有启动,s1.getSingleton()==s2.getSingleton()是null==null所以是true
我启动试了一下 他们俩的确用的是同一个对象 是true 谢谢 学习了{:soso_e183:}
作者: 陈科宇    时间: 2013-2-6 18:50
李桐 发表于 2013-2-6 17:27
貌似你的s1,s2没有启动,s1.getSingleton()==s2.getSingleton()是null==null所以是true
我启动试了一下  ...

我很抱歉,忘了开启了。我再补上一点,如果要让主线程在其他线程之后执行,设置优先级并不是好的办法,应该是用join方法。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2