暂时不考虑多线程的单例模式

简介:

饿汉式单例模式:

复制代码
 1 package cn.itcast.singleton;
 2     /*
 3     最简单的设计模式就是单例模式 
 4     单个实例的模式,一个类只能生成一个对象,
 5     new或者其他方式最后只能生成一个对象,不能再生成新的对象.
 6     */
 7 public class SingletonTest {
 8     public static void main(String[] args) {
 9         Singleton singleton = Singleton.getInstance();
10         Singleton singleton2 = Singleton.getInstance();
11         //判断生成的对象是否是一个对象.
12         System.out.println(singleton==singleton2);
13     }
14 }
15 class Singleton{
16     //在Singleton类中声明一个对象.然后在类中向外提供一个得到这个对象的方法
17     //下面的getInstance()方法是static类型的.要调用的也必须是static类型的.
18     private static Singleton singleton = new Singleton();
19     
20     //单例类Singleton中的构造方法必须是private,不能让外部访问该构造方法.否则无法实现单例模式
21     private Singleton(){
22         
23     }
24     //这个getInstance()方法必须是static静态的方法,因为这个方法是一个实例方法.
25     //外部调用实例方法通过该类的对象来调用,但是外部因为该类的构造方法是private的无法得到该类对象
26     //所以要声明成static静态的方法,通过类名来调用这个实例方法.
27     public static Singleton getInstance(){
28         return singleton;
29     }
30 }
31     /*
32     这种方式(饿汉式)是你在你没有调用Singleton的时候也生成一个singleton对象了.
33     这种是一定是单例的,第二种(懒汉式)在多线程的情况下可能不是单例的.
34     */
复制代码

懒汉式单例模式

复制代码
 1 package cn.itcast.singleton2;
 2     /*
 3     最简单的设计模式就是单例模式 
 4     单个实例的模式,一个类只能生成一个对象,
 5     new或者其他方式最后只能生成一个对象,不能再生成新的对象.
 6     */
 7 public class SingletonTest {
 8     public static void main(String[] args) {
 9         Singleton singleton = Singleton.getInstance();
10         Singleton singleton2 = Singleton.getInstance();
11         //判断生成的对象是否是一个对象.
12         System.out.println(singleton==singleton2);
13     }
14 }
15 class Singleton{
16     //在Singleton类中声明一个对象.然后在类中向外提供一个得到这个对象的方法
17     //下面的getInstance()方法是static类型的.要调用的也必须是static类型的.
18     private static Singleton singleton;
19     //这个地方先不赋值,不赋值肯定不对,就要在你调用getInstance()方法的时候判断这个singleton对象是否为空.
20     
21     //单例类Singleton中的构造方法必须是private,不能让外部访问该构造方法.否则无法实现单例模式
22     private Singleton(){
23         
24     }
25     //这个getInstance()方法必须是static静态的方法,因为这个方法是一个实例方法.
26     //外部调用实例方法通过该类的对象来调用,但是外部因为该类的构造方法是private的无法得到该类对象
27     //所以要声明成static静态的方法,通过类名来调用这个实例方法.
28     public static Singleton getInstance(){
29         if(singleton == null){
30             singleton = new Singleton();
31         }
32         return singleton;
33     }
34 }
复制代码

 ============================华丽丽的分割线====================================


本文转自SummerChill博客园博客,原文链接:http://www.cnblogs.com/DreamDrive/p/4005065.html,如需转载请自行联系原作者

相关文章
|
5月前
|
安全 Java
线程安全的单例模式(Singleton)
线程安全的单例模式(Singleton)
|
2月前
|
安全 Java 关系型数据库
单例模式下引发的线程安全问题
单例模式确保类在进程中仅有一个实例,适用于如数据库连接等场景。分为饿汉式与懒汉式:饿汉式在类加载时创建实例,简单但可能浪费资源;懒汉式延迟创建实例,需注意线程安全问题,常采用双重检查锁定(Double-Checked Locking)模式,并使用 `volatile` 关键字避免指令重排序导致的问题。
59 2
单例模式下引发的线程安全问题
|
1月前
|
设计模式 安全 Java
【多线程-从零开始-柒】单例模式,饿汉和懒汉模式
【多线程-从零开始-柒】单例模式,饿汉和懒汉模式
38 0
|
6月前
|
设计模式 安全 Java
【JAVA】Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式
【JAVA】Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式
|
4月前
|
设计模式 安全 Java
Java面试题:设计模式如单例模式、工厂模式、观察者模式等在多线程环境下线程安全问题,Java内存模型定义了线程如何与内存交互,包括原子性、可见性、有序性,并发框架提供了更高层次的并发任务处理能力
Java面试题:设计模式如单例模式、工厂模式、观察者模式等在多线程环境下线程安全问题,Java内存模型定义了线程如何与内存交互,包括原子性、可见性、有序性,并发框架提供了更高层次的并发任务处理能力
75 1
|
3月前
|
设计模式 SQL 安全
单例模式大全:细说七种线程安全的Java单例实现,及数种打破单例的手段!
设计模式,这是编程中的灵魂,用好不同的设计模式,能使你的代码更优雅/健壮、维护性更强、灵活性更高,而众多设计模式中最出名、最广为人知的就是Singleton Pattern单例模式。通过单例模式,我们就可以避免由于多个实例的创建和销毁带来的额外开销,本文就来一起聊聊单例模式。
|
4月前
|
微服务
多线程内存模型问题之在单例模式中,volatile关键字的作用是什么
多线程内存模型问题之在单例模式中,volatile关键字的作用是什么
|
4月前
|
设计模式 安全 Java
Java面试题:解释单例模式的实现方式及其优缺点,讨论线程安全性的实现。
Java面试题:解释单例模式的实现方式及其优缺点,讨论线程安全性的实现。
31 0
|
4月前
|
设计模式 安全 NoSQL
Java面试题:设计一个线程安全的单例模式,并解释其内存占用和垃圾回收机制;使用生产者消费者模式实现一个并发安全的队列;设计一个支持高并发的分布式锁
Java面试题:设计一个线程安全的单例模式,并解释其内存占用和垃圾回收机制;使用生产者消费者模式实现一个并发安全的队列;设计一个支持高并发的分布式锁
65 0
|
4月前
|
设计模式 安全 Java
Java面试题:如何实现一个线程安全的单例模式,并确保其在高并发环境下的内存管理效率?如何使用CyclicBarrier来实现一个多阶段的数据处理任务,确保所有阶段的数据一致性?
Java面试题:如何实现一个线程安全的单例模式,并确保其在高并发环境下的内存管理效率?如何使用CyclicBarrier来实现一个多阶段的数据处理任务,确保所有阶段的数据一致性?
57 0