单例设计模式懒汉式和恶汉式

一,单例设计模式懒汉式和恶汉式

懒汉式在类加载时不初始化,延迟加载。(配置文件)

饿汉式在类加载时初始化,加载慢,获取对象快。

饿汉式是线程安全的,

懒汉式需要加synchronized,否则不安全。

二,饿汉式

 1 public class Singletonehan {
 2     private static  Singletonehan singleton=new Singletonehan();
 3     private Singletonehan() {
 4     }
 5 public static Singletonehan getInstance(){
 6         return singleton;
 7 }
 8
 9     @Override
10     public String toString() {
11         return "Singletonehan{}";
12     }
13 }

测试

1 public class testehan {
2     public static void main(String[] args) {
3         Singletonehan singletonehan = Singletonehan.getInstance();
4         System.out.println(singletonehan);
5     }
6 }

三,懒汉式

 1 public class Singletonlanhan {
 2    // private static  Singletonlanhan singleton=new Singletonlanhan();
 3     private static  Singletonlanhan singleton=null;
 4
 5     private Singletonlanhan() {
 6     }
 7
 8     public static Singletonlanhan getInstance() {
 9         if (singleton == null) {
10             singleton = new Singletonlanhan();
11         }
12         return singleton;
13     }
14
15     @Override
16     public String toString() {
17         return "Singletonlanhan{}";
18     }
19 }

测试

1 public class test {
2     public static void main(String[] args) {
3         Singletonlanhan singletonlanhan = Singletonlanhan.getInstance();
4         System.out.println(singletonlanhan);
5     }
6 }

结果

Singletonlanhan{}

Process finished with exit code 0

补充加synchronized后的懒汉

 1 public class Singletonlanhan {
 2    // private static  Singletonlanhan singleton=new Singletonlanhan();
 3     private static  Singletonlanhan singleton=null;
 4
 5     private Singletonlanhan() {
 6     }
 7
 8     public synchronized static Singletonlanhan getInstance() {
 9         if (singleton == null) {
10             singleton = new Singletonlanhan();
11         }
12         return singleton;
13     }
14
15     @Override
16     public String toString() {
17         return "锁Singletonlanhan{}";
18     }
19 }

结果

锁Singletonlanhan{}

Process finished with exit code 0

原文地址:https://www.cnblogs.com/fengtangjiang/p/11106102.html

时间: 2024-08-09 05:06:17

单例设计模式懒汉式和恶汉式的相关文章

单例设计模式---懒汉式+饿汉式

package com.Thread; /** * 单例设计模式:确保一个类只有一个对象 */ public class Synchronized_Singleton { public static void main(String[] args) { JvmThread jvm1= new JvmThread(100); JvmThread jvm2= new JvmThread(100); jvm1.start(); jvm2.start(); } } /** * 懒汉式(饿汉式:在声明静态

Spring -11 -单例设计模式 -懒汉式/饿汉式(idea默认的)

单例设计模式 作用: 在应用程序有保证最多只能有一个实例. 好处: 2.1 提升运行效率. 2.2 实现数据共享. 案例:application 对象 懒汉式 3.1 对象只有被调用时才去创建. 3.2  示例代码 3.3由于添加了锁,所以导致效率低. public class lazySingleton { //懒汉式,单例模式! //由于对象需要被静态方法调用,把方法设置为static //由于对象是static,必须要设置访问权限修饰符为private , //如果是public 可以直接

单例设计模式之饿汉式(静态常量)

package com.waibizi; /** * 单例设计模式之饿汉式(静态常量) * 步骤 * 1.构造器私有化(防止new) * 2.类的内部创建对象 * 3.向外暴露一个静态的公共方法 getInstance * 4.代码实现 * @author 歪鼻子 * * *优点:这种写法比较简单,类加载的时候就完成了实例化.避免了线程同步问题 *缺点:类装载的时候就完成了实例化,如果从开始到至终都没使用过这个类,势必会造成资源的浪费 *结论:这种单例模式是可用的,可能会导致浪费(调用getIn

单例设计模式之饿汉式(静态代码块)

package com.waibizi.demo02; /** * 单例设计模式之饿汉式(静态代码块) * 这种方式与饿汉式静态常量的方式是类似的,类装载的时候也有直接创建对象 * @author 歪鼻子 * */ @SuppressWarnings("all") public class Singleton_Pattern { public static void main(String[] args) { // TODO Auto-generated method stub } }

单例设计模式之饿汉式与懒汉式

/* 设计模式:对问题行之有效的解决方式.其实它是一种思想. 1,单例设计模式. 解决的问题:就是可以保证一个类在内存中的对象唯一性. 必须对于多个程序使用同一个配置信息对象时,就需要保证该对象的唯一性. 如何保证对象唯一性呢? 1,不允许其他程序用new创建该类对象. 2,在该类创建一个本类实例. 3,对外提供一个方法让其他程序可以获取该对象. 步骤: 1,私有化该类构造函数. 2,通过new在本类中创建一个本类对象. 3,定义一个公有的方法,将创建的对象返回. */ //饿汉式 class

单例设计模式懒汉式的缺陷

http://icyfenix.iteye.com/blog/575052 IcyFenix 探索设计模式之六——单例模式 设计模式Spring应用服务器多线程JVM 6.单例模式(Singleton Pattern) 前面说提到的五种创建模式,主要解决的问题是如何创建对象,获得产品.而单例模式最要关心的则是对象创建的次数以及何时被创建. Singleton模式可以是很简单的,它的全部只需要一个类就可以完成(看看这章可怜的UML图).但是如果在“对象创建的次数以及何时被创建”这两点上较真起来,S

单例设计模式---懒汉式的多线程安全隐患

public class Single {    private static Single s=null;    private Single(){            }        public static Single getInstance(){/*        if(s==null){  //如果是多线程,会出现多个类名进来,可能冻结,然后醒来加载多个对象            s=new Single(); //然后new 出多个对象        }        ret

设计模式课程 设计模式精讲 8-2 单例设计模式-懒汉式及多线程Debug实战

1 主要内容 1.1 核心功能点 2 代码演练 2.1 单线程调用 2.2 多线程调用 1 主要内容 1.1 核心功能点 2 代码演练 2.1 单线程调用 测试类: package com.geely.design.pattern.creational.singleton; public class Test { public static void main(String [] args){ //这样写异常,因为构造方法私有 // LazySingleton lazySingleton = n

java设计模式_single(单例设计模式)

设计模式:解决某一类问题最行之有效的方法,java中有23种设计模式 一.单例设计模式概述: 1.解决一个类在内存中只有一个对象(保证一个类仅有一个实例,并提供一个访问他的全局访问点)  2.要保证对象的唯一: 1.为了避免其他程序过多的建立该类对象,先禁制其他程序建立该类对象 2.为了让其他程序可以访问到该类对象,只好在本类中,自定义一个对象 3.为了 方便其他程序对自定义对象的访问,可以对外提供一些访问方式 3.代码实现步骤: 1.将构造函数私有化 2.在类中创建一个本类对象 3.给外部提供