首先我们应该知道什么是单例模式:
首先这个类只能有一个实例,而且它必须自行创建这个实例,还有它必须自行 向整个系统提供这个实例。
那我们为什么要用单例模式呢?
因为他在我们开发时起到解决多线程并发访问的问题;还有节约系统内存,提交系统运行的效率,提高系统性能。单例模式也是从建筑方面派生出来的,例如:教室门就是一个很好地例子,不是单例模式的就是说一个人就有一个教室门,他的优点就是线程安全,但是他很浪费资源,所以在这里提出要用单例模式。但单例模式也有许多不足之处,如开发人员必须记住自己不能使用new关键字实例化对象。因为可能无法访问库源代码,因此应用程序开发人员可能会意外发现自己无法直接实例化此类。
然而实现单例模式的有好多种方法:懒汉模式、饿汉模式等等。
今天就让我来说一下饿汉模式和懒汉模式。
饿汉模式:见名知意,“他”很饿,迫切需要找到吃的... 所以 饿汉模式需要 第一时间 “找到吃的”(构建对象)。
1 /** 2 * 饿汉模式 3 */ 4 public class HungrySingleton { 5 private static HungrySingleton instance=new HungrySingleton(); 6 7 /** 8 * 禁止外部构建 9 */ 10 private HungrySingleton(){} 11 12 /** 13 * 由外部调用 14 * @return 15 */ 16 public static HungrySingleton getInstance(){ 17 return instance; 18 } 19 20 /** 21 * 测试 22 * @param args 23 */ 24 public static void main(String[] args) { 25 for(int i=0;i<20;i++){ 26 new Thread(()->{ 27 System.out.println(HungrySingleton.getInstance()); 28 }).start(); 29 } 30 } 31 32 }
懒汉模式:和饿汉模式不同,懒汉模式并不会一开始声明对象,而是需要等到调用时再声明对象。他很懒,所以你叫“它”它才会动...
1 /** 2 * 懒汉模式 3 */ 4 public class LazybonesSingleton1 { 5 //先声明 6 private static LazybonesSingleton instance; 7 /** 8 * 禁止外部构建 9 */ 10 private LazybonesSingleton(){} 11 12 /** 13 * 对外提供调用方法 14 * @return 15 */ 16 public static LazybonesSingleton getInstance() { 17 if(instance==null){ 18 instance=new LazybonesSingleton(); 19 } 20 21 return instance; 22 } 23 24 /** 25 * 测试 26 * @param args 27 */ 28 public static void main(String[] args) { 29 for(int i=0;i<20;i++){ 30 new Thread(()->{ 31 System.out.println(LazybonesSingleton.getInstance()); 32 }).start(); 33 } 34 } 35 36 37 }
初入江湖望各位大侠能够指点,3ks