Java单例模式《二》懒汉式

 1 package com.study.mode;
 2 /**
 3  * 单例模式:  懒汉式,需要的时候创建。
 4  * @ClassName: SingleBean2
 5  * @author BlueLake
 6  * @date 2012年9月5日 下午9:08:21
 7  */
 8 public class SingleBean2 {
 9
10     //1.私有化构造方法。
11     private SingleBean2(){
12
13     }
14     //2.创建一个当前类的静态属性
15     private static SingleBean2 single = null;
16
17     //3.1 在需要的时候,创建对象。
18     public static SingleBean2 getSingleA(){
19         if(single==null){
20             single = new SingleBean2();
21         }
22         return single;
23     }
24
25     //3.2    由于3.1的方法线程不安全,多线程时会有多个SingleBean2实例。所以加锁
26     public synchronized static SingleBean2 getSingleB(){
27         if(single==null){
28             single = new SingleBean2();
29         }
30         return single;
31     }
32
33     //3.3 ,由于每次调用3.2这个方法都要加锁,如果有的话直接返回就可以了,所以浪费内存
34     public static SingleBean2 getSingleC(){
35         //如果存在,直接返回,这里不用锁
36         if(single== null){
37             //如果,不存在,加锁,创建
38             synchronized(SingleBean2.class){
39                 //强壮性考虑,创建前,判断
40                 if(single==null){
41                     single = new SingleBean2();
42                 }
43             }
44         }
45         return single;
46     }
47 }
时间: 2024-10-31 11:59:38

Java单例模式《二》懒汉式的相关文章

Java 单例模式探讨

以下是我再次研究单例(Java 单例模式缺点)时在网上收集的资料,相信你们看完就对单例完全掌握了 Java单例模式应该是看起来以及用起来简单的一种设计模式,但是就实现方式以及原理来说,也并不浅显哦. 总结一下我所知道的单例模式实现方式: 1.预先加载法 Java代码 class S1 { private S1() { System.out.println("ok1"); } private static S1 instance = new S1(); public static S1

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

[深入]java 单例模式 关于单例模式的文章,其实网上早就已经泛滥了.但一个小小的单例,里面却是有着许多的变化.网上的文章大多也是提到了其中的一个或几个点,很少有比较全面且脉络清晰的文章,于是,我便萌生了写这篇文章的念头.企图把这个单例说透,说深入.但愿我不会做的太差. 首先来看一个典型的实现: 1 /** 2 * 基础的单例模式,Lazy模式,非线程安全 3 * 优点:lazy,初次使用时实例化单例,避免资源浪费 4 * 缺点:1.lazy,如果实例初始化非常耗时,初始使用时,可能造成性能问

你所知道的Java单例模式并不是单例模式

当我们搜索单例模式的时候,能看到很多例子,什么懒汉式.饿汉式,大概如下: public class Singleton { private static Singleton instance=null; private Singleton(){ System.out.println("Singleton..init..."); } public static Singleton getInstance(){ if(instance==null){ instance=new Single

java单例模式【csdn-炸死特】

概念: java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例.饿汉式单例.登记式单例三种. 单例模式有一下特点: 1.单例类只能有一个实例. 2.单例类必须自己自己创建自己的唯一实例. 3.单例类必须给所有其他对象提供这一实例. 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例.在计算机系统中,线程池.缓存.日志对象.对话框.打印机.显卡的驱动程序对象常被设计成单例.这些应用都或多或少具有资源管理器的功能.每台计算机可以有若干个打印机,但只能有一个Printe

java单例模式案例

</pre>单例模式是一种常见的设计模式,一般有三种方式,单例模式具有如下特点:<p></p><p><span style="white-space:pre">1.在类的属性中,自己初始化一个静态的私有的类实例<span style="white-space:pre"></span>2.将自己的构造方法写成private的方式,拒绝其他类或者操作再次使用构造函数将单例类再次实例化&l

java单例模式的个人理解

下面是我个人对java单例模式的个人理解 java单例设计模式是先辈们走过很多弯路才写出来的一些方法模式,总共有二三种模式.单线程:只有这个属性为null时才能创建,构造函数私有,确保每次都只创建一个,避免重复创建.缺点:只在单线程的情况下正常运行,在多线程的情况下,就会出问题.例如:当两个线程同时运行到判断instance是否为空的if语句,并且instance确实没有创建好时,那么两个线程都会创建一个实例. 双线程:当两个线程同时想创建实例,由于在一个时刻只有一个线程能得到同步锁,当第一个线

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

总结下Java单例模式的几种写法: 1. 饿汉式 public class Singleton { private static Singleton instance = new Singleton(); private Singleton() {} public static Singleton getInstance() { return instance; } } 优点:实现简单,不存在多线程问题,直接声明一个私有对象,然后对外提供一个获取对象的方法. 缺点:class 类在被加载的时候创

9种Java单例模式详解(推荐)

单例模式的特点 一个类只允许产生一个实例化对象. 单例类构造方法私有化,不允许外部创建对象. 单例类向外提供静态方法,调用方法返回内部创建的实例化对象.  懒汉式(线程不安全) 其主要表现在单例类在外部需要创建实例化对象时再进行实例化,进而达到Lazy Loading 的效果. 通过静态方法 getSingleton() 和private 权限构造方法为创建一个实例化对象提供唯一的途径. 不足:未考虑到多线程的情况下可能会存在多个访问者同时访问,发生构造出多个对象的问题,所以在多线程下不可用这种

Spark用Java实现二次排序的自定义key

本人在研究Spak,最近看了很多网上的对于SPARK用Java实现二次排序的方法,对于自定义key的做法 基本上都是实现Ordered<>接口,重写$greater.$greater$eq.$less.$less$eq.compare.compareTo方法,定义hashCode.equals····· 感觉好麻烦,其实我们自定义key只是用了里面的compareTo方法,其他的$greater.$greater$eq.$less.$less$eq.compare 不用做任何改动,hashCo