JAVA高级学习 (3)

笔试中手写单例模式一定要写线程安全的

单例模式-懒汉式的安全问题的解决
设计模式:在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式。
“套路”
在这里插入图片描述
单例设计模式:某个类只能存在一个对象实例
在这里插入图片描述

public class SingletonTest1{
 public static void main(String[] args){
  Bank bank1 = new Bank();
  Bank bank2 = new Bank();
 }
}
//**饿汉式**上来就new个对象
class Bank{
//1.私有化类的构造器 
   private Bank(){
//2.内部创建类的对象,要求此对象也声明为静态的;
private static Bank instance = new Bank();
//3.提供公共的静态的方法,返回类的对象
     public static Bank getInstance(){
return instance;
     }
  }
}
//**懒汉式**啥时候用啥时候造

public class SingletonTest2{
 public static void main(String[] args){
  Order order1 = Order.getInstance();
  Order order2 = Order.getInstance();
 }
}
class Order{
//1.私有化类的构造器 
   private Order(){
//2.声明当前类的对象,没有初始化
private static  Order instance = null;
//3.声明public、static的返回当前类对象的方法
     public static Order getInstance(){
      		if(instance == null){
			instance = new Order();
			}
			return instance;
     }
  }
}

懒汉式为线程不安全的。方式1:效率较差

public class SingletonTest2{
 public static void main(String[] args){
  Order order1 = Order.getInstance();
  Order order2 = Order.getInstance();
 }
}
class Order{
   private Order(){
private static  Order instance = null;
   //1  public static synchronized Order getInstance(){
		public static  Order getInstance(){
   //2   synchroized(Order.class){
      		if(instance == null){
			instance = new Order();
			}
			return instance;
     }
  }
}

class Order{
   private Order(){
private static  Order instance = null;
		public static  Order getInstance(){
		//效率较高,相当于加个牌子,告诉后来线程不需要等待
      		if(instance == null){
      	      synchroized(Order.class){
      	      if(instance == null){
			    instance = new Order();
			}
			return instance;
     }
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值