单例模式

定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

1.单例模式的动机是:创建类的单一对象。

2.单例模式的分类:饿汉式单例模式和带双重检查锁定机制的懒汉式单例以及IoDH技术

3.需要注意的是:多线程环境创建成多例对象()。

4.场景问题:应用程序配置文件的读取、任务的分配等都可以用单例模式。

饿汉式单例模式:

public class signleton
{
    private static signleton instance=new signleton();//程序载入类就会自动的实例化
    private signleton(){
    }
    public static signleton getInstance(){
        return instance;
    }
    public void test(){
        System.out.println("饿汉式单例模式");
    }
}
class client{
    public static void main(String [] argv){
        signleton inst1=signleton.getInstance();
        inst1.test();
    }
}

synchronized 关键字,代表这个方法加锁,相当于不管哪一个线程(例如线程A),运行到这个方法时,都要检查有没有其它线程B(或者C、 D等)正在用这个方法,有的话要等正在使用synchronized方法的线程B(或者C 、D)运行完这个方法后再运行此线程A,没有的话,直接运行。它包括两种用法:synchronized 方法(针对方法加锁)和 synchronized 块(针对代码块加锁)。

带双重检测锁定机制的懒汉式单例模式:

public class signleton
{
    private volatile static signleton instance=null;
    
    private signleton(){
    }
    
    public static signleton getInstance(){
        if(instance==null){//第一重检查
            synchronized(signleton.class){//锁定代码块
                if(instance==null)//第二重检查
                {
                    instance=new signleton();
                }
            }
        }
        return instance;
    }
    
    public void test(){
        System.out.println("双重检查的锁定机制懒汉式单例模式");
    }
}
class client{
    
    public static void main(String [] argv){
        
        signleton inst1=signleton.getInstance();
        inst1.test();
        
    }
}

IoDH 技术(针对多线程):

public class signleton
{
 
    private static class holderclass{ //类的内部静态类
        private static final signleton instance=new signleton();
    }
    
    private signleton(){
    }
    
    public static signleton getInstance(){
        return holderclass.instance;
    }
    
    public void test(){
        System.out.println("Initialization on demand holder");
    }
}
class client{
    
    public static void main(String [] argv){
        
        signleton inst1=signleton.getInstance();
        inst1.test();
        
    }
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值