设计模式_Java_多线程之单例设计模式(饿汉式和懒汉式)
2017-09-03 09:54
344 查看
单例设计模式:保证类在内存中只有一个对象。
如何保证类在内存中只有一个对象呢?
控制类的创建,不让其他类来创建本类的对象。private
在本类中定义一个本类的对象。Singleton s;
提供公共的访问方式。 public static Singleton getInstance(){return s}
单例设计模式的两种方法:
①饿汉式 开发用这种方式。
②懒汉式,单例的延迟加载模式,面试时会用到
饿汉式和懒汉式的区别:
饿汉式是时间换空间,懒汉式是空间换时间
在多线程访问时,饿汉式不会创建多个对象,而懒汉式有可能会创建多个对象
还有一种不怎么出名的同样为单例的设计模式:
举例:
Runtime类就是使用单例设计模式进行操作的
如何保证类在内存中只有一个对象呢?
控制类的创建,不让其他类来创建本类的对象。private
在本类中定义一个本类的对象。Singleton s;
提供公共的访问方式。 public static Singleton getInstance(){return s}
单例设计模式的两种方法:
①饿汉式 开发用这种方式。
②懒汉式,单例的延迟加载模式,面试时会用到
package com.soar.thread; public class Demo1_Singleton { /* * 单例设计模式:保证类在内存中只有一个对象。 */ public static void main(String[] args) { /*Singleton s1 = new Singleton(); //报错 Singleton s1 = Singleton.s; //成员变量被私有,不能通过类名.调用 Singleton.s = null; Singleton s2 = Singleton.s; System.out.println(s1 == s2); //true */ Singleton s1 = Singleton.getInstance(); Singleton s2 = Singleton.getInstance(); System.out.println(s1 == s2); //true } } //饿汉式 class Singleton{ //1.私有构造方法,其他类不能访问该构造方法了 private Singleton(){ } //2.创建本类对象 private static Singleton s = new Singleton(); //3.对外提供公共的访问方法 public static Singleton getInstance(){ //获取实例 return s; } } /* //懒汉式,单例的延迟加载模式 在开发中不用,在面试的时候会用 class Singleton{ //1.私有构造方法,其他类不能访问该构造方法了 private Singleton(){ } //2.声明一个引用 private static Singleton s; //3.对外提供公共的访问方法 public static Singleton getInstance(){ //获取实例 if(s == null){ //线程1等待,线程2等待 s = new Singleton(); } return s; } }*/
饿汉式和懒汉式的区别:
饿汉式是时间换空间,懒汉式是空间换时间
在多线程访问时,饿汉式不会创建多个对象,而懒汉式有可能会创建多个对象
还有一种不怎么出名的同样为单例的设计模式:
/*class Singleton{ //1.私有构造方法,其他类不能访问该构造方法了 private Singleton(){ } //2.声明一个引用 public static final Singleton s = new Singleton(); }*/
举例:
Runtime类就是使用单例设计模式进行操作的
package com.soar.thread; import java.io.IOException; public class Demo2_Runtime { public static void main(String[] args) throws Exception { Runtime r = Runtime.getRuntime(); //获取运行时对象 //r.exec("shutdown -s -t 3000"); //50分钟后电脑自动注销 r.exec("shutdown -a"); //取消刚才的操作 } }
相关文章推荐
- java单例设计模式-饿汉式与懒汉式
- JAVA基础——单例设计模式(饿汉式与懒汉式)
- java基础------》设计模式---》单例设计模式(饿汉式和懒汉式)
- java单例设计模式 饿汉式 懒汉式
- JAVA单例设计模式(饿汉式和懒汉式的区别)
- Java模式设计之单例模式, 接上篇【饿汉式,懒汉式】
- JAVA面向对象知识点总结(4)— 单例设计模式:饿汉式、懒汉式
- 226_尚学堂_高淇_java300集最全视频教程_【GOF23设计模式】_单例模式_应用场景_饿汉式_懒汉式
- java二十三种设计模式----(二)单例设计模式 :“懒汉式”与“饿汉式”的区别 为什么通常使用饿汉式
- JAVA 多线程-单例设计模式-懒汉式
- JAVA设计模式单例模式(懒汉式和饿汉式)
- Java设计模式——单例模式(饿汉式、懒汉式)
- Java---15---单例设计模式:---饿汉式和懒汉式
- Java懒汉式设计模式与多线程
- JAVA基础再回首(二十六)——面向对象思想设计原则、设计模式、简单工厂模式、工厂方法模式、单例设计模式之饿汉式和懒汉式、Runtime类
- java 单例设计模式之:懒汉式、饿汉式
- Java设计模式中的单例模式的懒汉式和饿汉式
- Java单例设计模式(饿汉式和懒汉式)
- Java中如果把构造方法也私有化,如何创建对象?Java的单例设计模式——饿汉式和懒汉式区别
- 单例模式中的饿汉式和懒汉式(Java设计模式)