首页 > 代码库 > 单例模式
单例模式
Singleton1.java
package edu.singleton; /*** * 把该类设计成单例设计模式(饿汉式) */ public class Singleton1 { // 定义一个本类对象并实例化 private static Singleton1 singleton = new Singleton1(); // 构造方法私有化 private Singleton1() { }; public static Singleton1 getInstance() { return singleton; } public void print() { System.out.println("饿汉式--单例设计模式"); } }
SingletonDemo.java
package edu.singleton; public class SingletonDemo { public static void main(String[] args) { Singleton1 singleton1 = Singleton1.getInstance(); singleton1.print(); Singleton1 singleton2 = Singleton1.getInstance(); singleton2.print(); System.out.println(singleton1 == singleton2); } } /* * 饿汉式--单例设计模式 饿汉式--单例设计模式 true */
Singleton2.java
package edu.singleton; /*** * 把该类设计成单例设计模式(懒汉式:会有线程安全问题) */ public class Singleton2 { // 定义一个本类对象并实例化 private static Singleton2 singleton = null; // 构造方法私有化 private Singleton2() { }; public static Singleton2 getInstance() { if (singleton == null) { singleton = new Singleton2(); } return singleton; } public void print() { System.out.println("饿汉式--单例设计模式"); } }
Singleton3.java
package edu.singleton; /*** * 把该类设计成单例设计模式(懒汉式:加线程锁,解决线程安全问题) */ public class Singleton3 { // 定义一个本类对象并实例化 private static Singleton3 singleton = null; // 构造方法私有化 private Singleton3() { }; public static Singleton3 getInstance() { /* * 如果第一个线程获取到了单例的实例对象, 后面的线程再获取实例的时候不需要进入同步代码块中了 */ // 同步代码块用的锁是单例的字节码文件对象,且只能用这个锁 if (singleton == null) { synchronized (Singleton3.class) { singleton = new Singleton3(); } } return singleton; } public void print() { System.out.println("饿汉式--单例设计模式"); } }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。