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;
     }
  }
}

猜你喜欢

转载自blog.csdn.net/HenryFanQAQ/article/details/110456441