注意:对于方法一、方法二,都要写一个私有的构造方法,因为如果省略这一步的话,外界就可以通过new,调用它的默认的公有不带参数构造方法了。
区别如下
1、对于方法一:
(1)不使用的时候不生成单例
(2)多线程的情况下,有可能出现并不是单例的情况。
package com.test2;
public class Singleton
{
private static Singleton singleton;
private Singleton()
{
}
public static Singleton getInstance()
{
if(null == singleton)
{
/* try
{
Thread.sleep(2000);
}
catch (InterruptedException e)
{
e.printStackTrace();
} */
singleton = new Singleton();
}
System.out.println(singleton);
return singleton;
}
}
针对于方法1的测试类(测试时恢复上面单例模式的注解部分)
package com.test2;
public class SingletonTest
{
public static void main(String[] args)
{
for(int i = 0 ; i < 10 ; ++i)
{
MyThread myThread = new MyThread();
myThread.start();
}
}
}
class MyThread extends Thread
{
@Override
public void run()
{
Singleton.getInstance();
}
}
2、方法二(推荐)
(1)类加载时就生成单例。
(2)多线程时也始终是单例模式。
package com.test2;
public class Singleton2
{
private static Singleton2 singleton = new Singleton2();
private Singleton2()
{
}
public static Singleton2 getInstance()
{
/* try
{
Thread.sleep(2000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
System.out.println(singleton); */
return singleton;
}
}
针对于方法2的测试类(测试时恢复上面单例模式的注解部分)
package com.test2;
public class Singleton2Test
{
public static void main(String[] args)
{
for(int i = 0 ; i < 10 ; ++i)
{
MyThread2 myThread2 = new MyThread2();
myThread2.start();
}
}
}
class MyThread2 extends Thread
{
@Override
public void run()
{
Singleton2.getInstance();
}
}
分享到:
相关推荐
单例模式的实现方式有很多种,下面我们将详细探讨几种常见的单例模式的实现方法: 1. 饿汉式(静态常量): 这种方式在类加载时就完成了初始化,因此是线程安全的。 ```java public class Singleton { private ...
根据给定的信息,本文将详细解释几种常见的单例模式,并通过具体的Java代码示例来阐述每种模式的特点和实现方式。 ### 单例模式简介 单例模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供一个全局...
下面将详细介绍在Unity中涉及的三种单例模式:C#经典单例、Unity内置单例以及一种线程安全的改进版单例。 1. C#经典单例: 这是最常见的单例实现方式,通常通过私有构造函数和一个静态方法来保证只有一个实例。在...
接下来,我们将深入探讨几种常见的单例模式实现方式。 ### 1. 饿汉式(静态常量) ```java public class Singleton { private static final Singleton INSTANCE = new Singleton(); private Singleton() {} ...
### JAVA单例模式的几种实现方法 #### 一、饿汉式单例类 饿汉式单例类是在类初始化时就已经完成了实例化的操作。这种实现方式简单且线程安全,因为实例化过程是在编译期间完成的,不会受到多线程的影响。 **代码...
在多线程环境下,我们需要确保单例实例的创建只发生一次,以上几种方式除了懒汉式(线程不安全)外,都能保证线程安全。对于反序列化测试,由于默认反序列化会生成新实例,需要重写 `readResolve()` 方法来防止这种...
下面将详细介绍单例模式的几种常见实现方式。 1. 饿汉式(静态常量) 饿汉式单例在类加载时就完成了初始化,因此线程安全。这种方式简单且效率高,但如果单例对象不被使用,会造成内存浪费。 ```java public class...
下面我们将深入探讨单例模式的几种实现方式。 ### 1. 饿汉式(静态常量) 饿汉式单例在类加载时就完成了初始化,因此是线程安全的。代码如下: ```java public class Singleton { private static final ...
这个讲的是单例模式的多种不同实现方式,希望对单例感兴趣的同学看看
以下是几种常见的单例模式实现方式: 1. **饿汉式(静态常量)**: 这是最简单的实现方式,它在类加载时就完成了初始化,因此是线程安全的。 ```java public class Singleton { private static final Singleton...
在 Java 中,单例模式的写法有好几种,主要有懒汉式单例、饿汉式单例、登记式单例等。 懒汉式单例是一种常见的单例模式实现方式,它在第一次调用的时候实例化自己。下面是懒汉式单例的四种写法: 1、基本懒汉式...
以下是对这六种常见单例模式实现方式的详细解释: 1. **饿汉式(静态常量)** 这是最简单的单例实现,它在类加载时就创建了实例,线程安全。 ```java public class Singleton { private static final Singleton...
"C++ 单例模式的几种实现方式研究" 单例模式是设计模式中最常应用的一种模式,也是面试官最喜欢的题目。但是,如果没有学过设计模式的人,可能不会想到要去应用单例模式,面对单例模式适用的情况。 单例模式的主要...
本篇文章将深入探讨Python中实现单例模式的几种方式以及它们的优缺点和优化策略。 首先,Python的模块机制实际上天然地支持单例模式。当模块首次被导入时,解释器会执行模块中的所有代码,生成相应的`.pyc`文件。...
本教程将详细介绍三种主要的传值方式:单例(Singleton)、代理(Delegate)以及Key-Value Coding(KVC)。理解并熟练掌握这些方法,能有效提升应用的交互性和代码的可维护性。 **1. 单例(Singleton)** 单例模式...
为了解决这个问题,可以采用以下几种方法: 1. **双重检查锁定(Double-checked locking)**:这是一种常用的解决线程安全问题的方法,可以在不牺牲性能的情况下保证单例模式的线程安全。 2. **使用`@synchronized`...
iOS 页面间几种传值方式 iOS 页面间传值是 iOS 开发中一个常见的需求,通常情况下,我们可以使用属性、代理、block、单例、通知等多种方式来实现页面间的传值。 属性传值 属性传值是最常见的一种传值方式。在 iOS...
在"singleton.zip"压缩包中,我们可能会找到几种不同的Java单例实现方式的示例代码,包括饿汉式、懒汉式、反射实现以及内部类实现等。以下是对这些单例模式实现方式的详细解释: 1. **饿汉式(Eager Initialization...
为解决这一问题,有以下几种方案: 1. **在`getInstance`方法上加同步关键字**:简单但效率较低。 ```java public static synchronized Singleton getInstance() { if (single == null) { single = new ...