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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© smile2015 中级黑马   /  2015-3-26 13:04  /  334 人查看  /  2 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

延时加载的单例设计模式?可用饿汉式和懒汉式去分析。如下
问题:饿汉式与懒汉式的不同?
       懒汉式用于实例的延迟加载,如果多线程访问时会出现安全问题。
解决:可以加同步代码块解决,但是低效,用双重判断形式提高效率问题。
       加同步时,使用的锁是哪一个?
答:该类所属的字节码对象,如synchronized(Single.class)

/*
class Single
{
        private static final Single s = new Single();
        private Single(){}
        public static Single getInstance()
        {
                return s;
        }
}
*/


//懒汉式
在多线程访问时会出现安全隐患,所以用synchronized(){},但是每次访问都要判断锁。
低效,解决方法,双重判断,减少判断次数,提高 懒汉式的效率。
因为很麻烦,所以一般选择饿汉式。

class Single
{
        private static Single s = null;
        private Single(){}


        public static  Single getInstance()
        {
                if(s==null)
                {
                        synchronized(Single.class)//注意锁的对象
                        {
                                if(s==null)
                                        //--->A;
                                        s = new Single();
                        }
                }
                return s;
        }
}

class SingleDemo
{
        public static void main(String[] args)
        {
                System.out.println("Hello World!");
        }
}

2 个回复

正序浏览
顶一个
回复 使用道具 举报
这个是老毕的吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马