转自:http://blog.csdn.net/withiter/article/details/8140338

今天中午闲着没事,就随便写点关于Java单例模式的。其实单例模式实现有很多方法,这里我将对这些方法进行对比分析:

第一种:

  1. public class Singleton2 {
  2. private Singleton2(){
  3. System.out.println("This is Singleton2's instance.");
  4. };
  5. private static Singleton2 instance = null;
  6. public static Singleton2 getInstance(){
  7. if(instance == null) {
  8. instance = new Singleton2();
  9. }
  10. return instance;
  11. }
  12. }

这种情况未加锁,可能会产生数据错误,比如两个同时新生成的对象,一个把对象数据改变了,而另一个使用的没改变之前的。

第二种:

  1. public class Singleton1 {
  2. private Singleton1(){
  3. System.out.println("This is Singleton1's instance.");
  4. }
  5. private static Singleton1 instance = null;
  6. public static Singleton1 getInstance2() {
  7. if(instance == null){   //1
  8. synchronized (Singleton1.class) {  //2
  9. if(instance == null) {
  10. instance = new Singleton1();
  11. }
  12. }
  13. }
  14. return instance;
  15. }
  16. }

这种只会在第一次的时候产生阻塞,之后每实例一次对象,就会在第1步时跳过去,在第一次实例的时候,会在第2步那里产生阻塞,以后就不会了,这种相对来说是最好的。

第三种:

  1. public class Singleton1 {
  2. private Singleton1(){
  3. System.out.println("This is Singleton1's instance.");
  4. }
  5. private static Singleton1 instance = null;
  6. public static synchronized Singleton1 getInstance(){  //1
  7. if(instance == null){
  8. instance = new Singleton1();
  9. }
  10. return instance;
  11. }
  12. }

多线程的时候每次都会在1这里产生阻塞。

java单例模式之懒汉式分析的更多相关文章

  1. JAVA单例模式:懒汉式,饿汉式

    今天复习了一下java的单例模式,写了懒汉式和饿汉式的实现例子.代码如下: 1.懒汉式单例 package com.lf.shejimoshi; /** * @classDesc: 类描述:(懒汉式单 ...

  2. 关于Java单例模式中懒汉式和饿汉式的两种类创建方法

    一. 什么是单例模式 因程序需要,有时我们只需要某个类同时保留一个对象,不希望有更多对象,此时,我们则应考虑单例模式的设计. 二. 单例模式的特点 1. 单例模式只能有一个实例. 2. 单例类必须创建 ...

  3. Java单例模式之最优解分析【为何说是最优解】

    代码如下 /** * * @ClassName: SingletionStaticInner * @Description: TODO[单例模式之最优解] * @author shundong.wu ...

  4. Java单例模式《二》懒汉式

    package com.study.mode; /** * 单例模式: 懒汉式,需要的时候创建. * @ClassName: SingleBean2 * @author BlueLake * @dat ...

  5. java单例模式

    单例模式(Singleton),保证一个类仅有一个实例,并提供一个访问它的全局访问点.   使用场景:在一个系统中,要求一个类有且仅有一个对象,如果出现多个对象就会出现"不良反映" ...

  6. 【深入】java 单例模式(转)

    [深入]java 单例模式 关于单例模式的文章,其实网上早就已经泛滥了.但一个小小的单例,里面却是有着许多的变化.网上的文章大多也是提到了其中的一个或几个点,很少有比较全面且脉络清晰的文章,于是,我便 ...

  7. 深入Java单例模式(转)

    深入Java单例模式 源自 http://devbean.blog.51cto.com/448512/203501 在GoF的23种设计模式中,单例模式是比较简单的一种.然而,有时候越是简单的东西越容 ...

  8. Java 单例模式探讨

    以下是我再次研究单例(Java 单例模式缺点)时在网上收集的资料,相信你们看完就对单例完全掌握了 Java单例模式应该是看起来以及用起来简单的一种设计模式,但是就实现方式以及原理来说,也并不浅显哦. ...

  9. 单例模式:Java单例模式的几种写法及它们的优缺点

    总结下Java单例模式的几种写法: 1. 饿汉式 public class Singleton { private static Singleton instance = new Singleton( ...

随机推荐

  1. JS-textarea限制输入字数

    解决办法: #descrip 是textarea的id,字数小于40: $("#descrip").on('input',function(event) { if ($(" ...

  2. c++11——多线程

    c++11中增加了线程以及线程相关的类,很方便的支持了并发编程. 1. 线程 线程创建     使用std::thread创建线程,提供线程函数或者函数对象即可,并且可以指定线程函数的参数. #inc ...

  3. JZOJ.5327【NOIP2017模拟8.21】四驱兄弟

    Description

  4. 逐一取Map值

    String[] mKeys = starDetil.getRows().keySet().toArray(new String[starDetil.getRows().size()]); starD ...

  5. 170420、maven内置常量

    Maven工程插件配置中通常会用到一些Maven变量,因此需要找个地方对这些变量进行统一定义,下面介绍如何定义自定义变量. 在根节点project下增加properties节点,所有自定义变量均可以定 ...

  6. 160601、Websocet服务端实现

    今天是六一儿童节,祝愿小朋友们节日快乐!大朋友们事事顺心! Websocet服务端实现 WebSocketConfig.Java ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...

  7. 进击的RecyclerView入门三(要是能拖动就好了)

    还是接着上一讲"进击的RecyclerView入门二(来点小装饰?)",在上一讲中我们学到了怎么给不同的Item定制不同的外观,但貌似那个蓝色的框实在太丑了,咱还是把它干了吧. @ ...

  8. linux 定时备份mysql数据库

    首先要先搞清楚两个概念: ①.mysqldump,mysqldump是mysql的逻辑备份工具,它不是linux的命令,工作原理类似产生一些列sql语句,对数据库进行指定的逻辑备份. 最简洁的形式是: ...

  9. CodeForces 732C Sanatorium

    C. Sanatorium time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  10. HDU3306—Another kind of Fibonacci

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3306 题目意思:一个斐波那契数列的变式,本来是A[n]=A[n-1]+A[n-2],现在变成A[n]= ...