注意:对于方法一、方法二,都要写一个私有的构造方法,因为如果省略这一步的话,外界就可以通过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();
}
}
分享到:
相关推荐
几种单例模式的书写方式
讲述几种单例模式。内有详细的实例说明,分别对几种单例模式举例说明。
unity中在场景切换时需要经常数据分享并处理,在此分享给大家利用C#模式和Unity模式分别实现的单例共享数据
单例模式的几种实现方式Demo
详细讲解了Java单例模式的几种实现方式,并有详细的示例配合讲解.
单例模式的几种实现方式demo
NULL 博文链接:https://maozhetao.iteye.com/blog/2319348
这个讲的是单例模式的多种不同实现方式,希望对单例感兴趣的同学看看
IOS 页面之间几种传值方式(单例,代理,kvc) 分别实现用单例,代理,kvc 方式在页面之间的传值方式
Python中的单例模式的几种实现方式的及优化
里面包含了,几种单例的实现demo,开包即用
单例模式,可以说设计模式中最常应用的一种模式了,据说也是面试官最喜欢的题目。但是如果没有学过设计模式的人,可能不会想到要去应用单例模式,面对单例模式适用的情况
自己总结的6中单例模式的写法,也有测试类,可以试验下,自己稍微修改一下后,验证安全性,纯粹为学习,建议可提
2020-02-10 王争设计模式之美进入课程讲述:冯永吉时长 10:21大小 8.31M上两节课中,我们针对单例模式,讲解了单例的应用场景、几种常见的代码实现
线程安全的单例模式实现有几种思路,个人认为第2种方案最优雅:、饿汉式、借助内部类、普通加锁解决、双重检测,但要注意写法,如果单体模式继续扩展为N元单体模式,那就是对象池模式了
单例模式,您能写出几个呢?这个PPT将为你全面阐述5种不同形式的单例模式。
主要介绍了Java单例模式实现的几种方式的相关资料,需要的朋友可以参考下
单例模式是一种最简单的创建型设计模式,主要用于对系统资源的管理与控制,在软件开发...文中通过内容管理系统项目,深入剖析了几种常用的单例类,包括饿汉式单例类、懒汉式单例类的应用,优化设计了JAVA双重检查单例模式。