首先我们应该知道什么是单例模式:
首先这个类只能有一个实例,而且它必须自行创建这个实例,还有它必须自行 向整个系统提供这个实例。
那我们为什么要用单例模式呢?
因为他在我们开发时起到解决多线程并发访问的问题;还有节约系统内存,提交系统运行的效率,提高系统性能。单例模式也是从建筑方面派生出来的,例如:教室门就是一个很好地例子,不是单例模式的就是说一个人就有一个教室门,他的优点就是线程安全,但是他很浪费资源,所以在这里提出要用单例模式。但单例模式也有许多不足之处,如开发人员必须记住自己不能使用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