java单例模式之懒汉式分析
转自:http://blog.csdn.net/withiter/article/details/8140338
今天中午闲着没事,就随便写点关于Java单例模式的。其实单例模式实现有很多方法,这里我将对这些方法进行对比分析:
第一种:
- public class Singleton2 {
- private Singleton2(){
- System.out.println("This is Singleton2's instance.");
- };
- private static Singleton2 instance = null;
- public static Singleton2 getInstance(){
- if(instance == null) {
- instance = new Singleton2();
- }
- return instance;
- }
- }
这种情况未加锁,可能会产生数据错误,比如两个同时新生成的对象,一个把对象数据改变了,而另一个使用的没改变之前的。
第二种:
- public class Singleton1 {
- private Singleton1(){
- System.out.println("This is Singleton1's instance.");
- }
- private static Singleton1 instance = null;
- public static Singleton1 getInstance2() {
- if(instance == null){ //1
- synchronized (Singleton1.class) { //2
- if(instance == null) {
- instance = new Singleton1();
- }
- }
- }
- return instance;
- }
- }
这种只会在第一次的时候产生阻塞,之后每实例一次对象,就会在第1步时跳过去,在第一次实例的时候,会在第2步那里产生阻塞,以后就不会了,这种相对来说是最好的。
第三种:
- public class Singleton1 {
- private Singleton1(){
- System.out.println("This is Singleton1's instance.");
- }
- private static Singleton1 instance = null;
- public static synchronized Singleton1 getInstance(){ //1
- if(instance == null){
- instance = new Singleton1();
- }
- return instance;
- }
- }
多线程的时候每次都会在1这里产生阻塞。
java单例模式之懒汉式分析的更多相关文章
- JAVA单例模式:懒汉式,饿汉式
今天复习了一下java的单例模式,写了懒汉式和饿汉式的实现例子.代码如下: 1.懒汉式单例 package com.lf.shejimoshi; /** * @classDesc: 类描述:(懒汉式单 ...
- 关于Java单例模式中懒汉式和饿汉式的两种类创建方法
一. 什么是单例模式 因程序需要,有时我们只需要某个类同时保留一个对象,不希望有更多对象,此时,我们则应考虑单例模式的设计. 二. 单例模式的特点 1. 单例模式只能有一个实例. 2. 单例类必须创建 ...
- Java单例模式之最优解分析【为何说是最优解】
代码如下 /** * * @ClassName: SingletionStaticInner * @Description: TODO[单例模式之最优解] * @author shundong.wu ...
- Java单例模式《二》懒汉式
package com.study.mode; /** * 单例模式: 懒汉式,需要的时候创建. * @ClassName: SingleBean2 * @author BlueLake * @dat ...
- java单例模式
单例模式(Singleton),保证一个类仅有一个实例,并提供一个访问它的全局访问点. 使用场景:在一个系统中,要求一个类有且仅有一个对象,如果出现多个对象就会出现"不良反映" ...
- 【深入】java 单例模式(转)
[深入]java 单例模式 关于单例模式的文章,其实网上早就已经泛滥了.但一个小小的单例,里面却是有着许多的变化.网上的文章大多也是提到了其中的一个或几个点,很少有比较全面且脉络清晰的文章,于是,我便 ...
- 深入Java单例模式(转)
深入Java单例模式 源自 http://devbean.blog.51cto.com/448512/203501 在GoF的23种设计模式中,单例模式是比较简单的一种.然而,有时候越是简单的东西越容 ...
- Java 单例模式探讨
以下是我再次研究单例(Java 单例模式缺点)时在网上收集的资料,相信你们看完就对单例完全掌握了 Java单例模式应该是看起来以及用起来简单的一种设计模式,但是就实现方式以及原理来说,也并不浅显哦. ...
- 单例模式:Java单例模式的几种写法及它们的优缺点
总结下Java单例模式的几种写法: 1. 饿汉式 public class Singleton { private static Singleton instance = new Singleton( ...
随机推荐
- UE4插件
源代码中包含一些插件例子 C:\Program Files\Epic Games\UE_4.15\Engine\Plugins\Developer 一下截图来自官网https://docs.unrea ...
- css+jq写的小小的移动端按钮的动画改变(三个很闲变成一个叉号)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 一个简单的ServletContextListener示例
ServletContext可以初始化String类型的参数.但是,如果你希望应用初始化参数是一个数据库DataSource呢?上下文参数只能是String.毕竟,你不能把一个Dog对象塞到XML部署 ...
- BaseAdapter<T> 重写 createViewFromResource实现界面,刷新,加载,移除
import java.util.ArrayList; import java.util.List; import android.content.Context; import android.vi ...
- 插件—jquery.validate.js
前言 在学习jquery.validate.js中的一个小案例,只是这个插件的简单使用. 案例代码如下: <head> <title></title> ...
- spring @Transactional注解参数详解(转载)
事物注解方式: @Transactional 当标于类前时, 标示类中所有方法都进行事物处理 , 例子: 1 @Transactional public class TestServiceBean i ...
- js Tab切换实例
js 实现 tab 切换 实现如下效果: 1.图片每1秒钟切换1次. 2.当鼠标停留在整个页面上时,图片不进行轮播. 3.当点击切换页的选项上时,出现该选项的对应图片,而且切换页选项的背景颜色发生相应 ...
- 02.Elasticsearch入门
Elasticsearch支持Http类型的Restful风格API请求,需要打开9200端口.Elasticsearch服务会监听两个端口9200和9300,9200提供Http Restf ...
- FZU 2140 Forever 0.5(找规律,几何)
Problem 2140 Forever 0.5 Accept: 371 Submit: 1307 Special Judge Time Limit: 1000 mSec Memory Limit : ...
- PacificA: Replication in Log-Based Distributed Storage Systems
PacificA: Replication in Log-Based Distributed Storage Systems - Microsoft Research https://www.micr ...