- 浏览: 1467163 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
luhouxiang:
写的很不错,学习了
Extjs 模块化动态加载js实践 -
kingkongtown:
如果想改成淘宝后台那样,可以在编辑器批量上传图片呢?
kissy editor 阶段体会 -
317966578:
兄弟我最近也在整jquery和caja 开放一些接口。在git ...
caja 原理 : 前端 -
liuweihug:
Javascript引擎单线程机制及setTimeout执行原 ...
setTimeout ,xhr,event 线程问题 -
辽主临轩:
怎么能让浏览器不进入 文档模式的quirks模式,进入标准的
浏览器模式与文本模式
Java单例模式应该是看起来以及用起来简单的一种设计模式,但是就实现方式以及原理来说,也并不浅显哦。
总结一下我所知道的单例模式实现方式:
1.预先加载法
class S1 { private S1() { System.out.println("ok1"); } private static S1 instance = new S1(); public static S1 getInstance() { return instance; } }
优点:
1.线程安全的
2.在类加载的同时已经创建好一个静态对象,调用时反应速度快。
缺点:
资源利用效率不高,可能getInstance永远不会执行到,但是执行了该类的其他静态方法或者加载了该类(class.forName),那么这个实例仍然初始化了
2.initialization on demand,延迟加载法 (考虑多线程)
class S2 { private S2() { System.out.println("ok2"); } private static S2 instance = null; public static synchronized S2 getInstance() { if (instance == null) instance = new S2(); return instance; } }
优点: 资源利用率高,不执行getInstance就不会被实例,可以执行该类其他静态方法。
缺点:
第一次加载时发应不快 ,多线程使用不必要的同步开销大
3.initialization on demand double check 双重检测( 考虑多线程 )
class S3 { private S3() { System.out.println("ok3"); } private static S3 instance = null; public static S3 getInstance() { if (instance == null) { synchronized (S3.class) { if (instance == null) instance = new S3(); } } return instance; } }
优点: 资源利用率高, 不执行getInstance就不会被实例,可以执行该类其他静态方法。
缺点:
第一次加载时发应不快 ,由于java 内存模型一些原因偶尔会失败
4.initialization on demand holder (考虑多线程)
class S4 { private S4() { System.out.println("ok4"); } private static class S4Holder { static S4 instance = new S4(); } public static S4 getInstance() { return S4Holder.instance; } }
优点: 资源利用率高, 不执行getInstance就不会被实例,可以执行该类其他静态方法。
缺点:
第一次加载时发应不快
总结: 一般采用 1 即可,若对资源十分在意也可考虑 4 ,不要使用2,3了。
测试代码:(暂不探讨Class.forName类加载机制)
/** * Created by IntelliJ IDEA. * User: yiminghe * Date: 2009-6-8 * Time: 19:20:52 */ public class Singleton { public static void main(String[] args) throws Exception{ System.out.println(Class.forName("S1")); System.out.println(Class.forName("S2")); System.out.println(Class.forName("S3")); System.out.println(Class.forName("S4")); } } /* 预先加载法 优点:1.线程安全的, 2.在类加载的同时已经创建好一个静态对象,调用时反应速度快。 缺点: 资源利用效率不高,可能这个单例不会需要使用也被系统加载 */ class S1 { private S1() { System.out.println("ok1"); } private static S1 instance = new S1(); public static S1 getInstance() { return instance; } } /* initialization on demand,延迟加载法 (考虑多线程) 优点:1.资源利用率高 缺点:第一次加载是发应不快 ,多线程使用不必要的同步开销大 */ class S2 { private S2() { System.out.println("ok2"); } private static S2 instance = null; public static synchronized S2 getInstance() { if (instance == null) instance = new S2(); return instance; } } /* initialization on demand - double check 延迟加载法改进之双重检测 (考虑多线程) 优点:1.资源利用率高 缺点:第一次加载是发应不快 ,由于java 内存模型一些原因偶尔会失败 */ class S3 { private S3() { System.out.println("ok3"); } private static S3 instance = null; public static S3 getInstance() { if (instance == null) { synchronized (S3.class) { if (instance == null) instance = new S3(); } } return instance; } } /* initialization on demand holder (考虑多线程) 优点:1.资源利用率高 缺点:第一次加载是发应不快 */ class S4 { private S4() { System.out.println("ok4"); } private static class S4Holder { static S4 instance = new S4(); } public static S4 getInstance() { return S4Holder.instance; } }
发表评论
-
continuation, cps
2013-09-12 16:49 2814起 随着 nodejs 的兴起,异步编程成为一种潮流 ... -
using mustache with spring mvc
2011-06-16 20:30 4723spring 基本不用介绍了,是目前最好的 IOC 容器了 ... -
备忘:使用 intellij idea 进行远程调试
2011-05-03 18:56 33610以前都是很土得打 log ,发现一篇关于 java 调试器架构 ... -
前后端编码传递
2010-10-21 00:12 2058背景: 关于编码是 BS 的开发是个大问题,包 ... -
javabean与attribute
2010-07-15 21:02 2442以前很忽视 javabean , ... -
JAVA学习路线图
2010-06-20 23:24 0最近论坛上看到好几个朋友都在问,如何学习 Java的问题, ... -
linux下定位java应用
2010-06-09 02:48 1429场景: java 应用不同于其它程序,在ps查看时程 ... -
java中的协变
2010-05-27 23:17 3361一个一直有点模糊的概念,记录一下,协变是指一个类型随着它关联的 ... -
验证码图片生成
2010-04-29 22:15 0<%@ page contentType="i ... -
利用aop重构数据访问层
2010-02-24 20:57 2104由于一直以来小项目做的多,造成了轻后端重前端的恶果,结果后端现 ... -
struts2讲义
2009-11-07 11:53 0struts2讲义 -
xml transfer for beyond compare
2009-10-22 17:33 0xml transfer for beyond compare ... -
Digester 空白保留问题
2009-10-17 16:40 1984Digester 详细介绍 : apach ... -
Jsp - pageEncoding 解析
2009-09-29 22:28 2453pageEncoding 作为 Jsp page 指令 ... -
图解JVM在内存中申请对象及垃圾回收流程
2009-09-15 20:33 0http://longdick.ite ... -
javarebel
2009-09-11 22:23 0使用JavaRebel实现即时重载javaclass更改 ... -
mac java web开发配置备忘
2009-09-05 17:02 89基本上和linux配置差不多,mac 可算兼具 linux 命 ... -
10个让我去寻找比Java更好的语言的理由
2009-08-26 13:02 0别误会我. 在我的职业生涯中我写了无数的Java代码,我当 ... -
生僻用法:finally and return
2009-08-26 12:55 1509本质上还是 reference 与 primitive val ... -
事件人工详情整理Pattern
2009-08-09 16:13 0事件人工详情整理Pattern
相关推荐
在Java中,有多种实现单例模式的方法,每种都有其特点和适用场景。接下来,我们将深入探讨这些实现方式。 首先,我们来看**懒汉式(Lazy Initialization)**。这种实现方式是在类被首次请求时才创建单例对象,延迟...
本篇文章将深入探讨如何在Java中实现单例模式,以及如何创建一个工具类来封装单例的创建。 首先,让我们了解单例模式的几种常见实现方式: 1. 饿汉式(静态常量): 这是最简单的单例实现,它在类加载时就完成了...
Java单例模式是一种常用的设计模式,它保证一个类只有一个实例,并提供全局访问点。这种模式在需要频繁创建和销毁对象的场景中,或者当对象昂贵时(如数据库连接),能够节省系统资源,提高效率。本篇文章将深入探讨...
下面我们将深入探讨Java单例模式的概念、实现方式以及其优缺点。 **单例模式的概念** 单例模式的核心思想是限制类的实例化,只允许创建一个对象,同时提供一个全局访问点,使得这个唯一的实例可以被任何需要的地方...
"设计模式单例模式和工厂模式综合应用"的主题聚焦于两种常用的设计模式:单例模式和工厂模式,并探讨它们如何协同工作来实现高效、灵活的代码结构。这个主题尤其适用于Java编程语言,因为Java的面向对象特性使得设计...
下面我们将深入探讨Java单例模式的实现方式、优缺点以及注意事项。 一、单例模式的实现方式 1. 饿汉式(静态常量) 这是最简单的单例实现,通过静态常量在类加载时就初始化单例,保证了线程安全,但同时也意味着...
在Java中,单例模式的实现通常有几种方法: 1. **饿汉式(静态常量)**:在类加载时就完成初始化,所以类加载比较慢,但获取对象的速度快,且线程安全。 ```java public class Singleton { private static final ...
根据给定的信息,我们可以深入探讨Java单例模式的登录案例,并从中提炼出多个重要的知识点。 ### 单例模式概述 单例模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供一个全局访问点。这种模式通常...
Java单例模式是一种设计模式,它允许类只有一个实例,并提供一个全局访问点。在上述的场景中,我们探讨了如何通过单例模式来优化读取配置文件的过程。配置文件是许多应用程序的重要组成部分,它们通常存储应用程序...
Java单例模式是一种常用的软件设计模式,它的核心思想是确保一个类只有一个实例,并提供全局访问点。在Java编程中,单例模式被广泛应用于控制资源的共享,例如数据库连接池、线程池或者日志系统等。在本篇文章中,...
本篇将深入探讨标题中提及的几种设计模式:Model-View-Controller(MVC)模式、单例模式、代理模式以及工厂模式,尤其是简单工厂模式。 **1. Model-View-Controller (MVC) 模式** MVC模式是一种架构模式,它将应用...
在《Java性能优化》一书中,作者深入探讨了单例模式的各种实现方式及其优化。 1. 最简单的实现方式是使用静态内部类,这种方式实现了延迟加载(lazy initialization),同时也保证了线程安全。如下所示: ```java ...
在本文中,我们将深入探讨三种工厂设计模式——简单工厂模式、抽象工厂模式和工厂方法模式,以及两种单例模式——饿汉单例模式和懒汉单例模式。这些模式都是面向对象设计中的重要组成部分,对于理解和构建可维护、可...
单例模式的实现方式有很多种,下面我们将详细探讨几种常见的单例模式的实现方法: 1. 饿汉式(静态常量): 这种方式在类加载时就完成了初始化,因此是线程安全的。 ```java public class Singleton { private ...
在这个场景中,我们将探讨如何使用单例模式来创建一个学生管理系统,主要涉及“饿汉式”和“懒汉式”两种实现方式。 **饿汉式单例** 饿汉式单例在类加载时就完成了实例化,因此它是线程安全的。这种方式保证了单例...
在这篇文章中,我们将探讨Java双重检查加锁单例模式的详解,包括它的优点和缺点,以及如何正确地使用它。 Java双重检查加锁单例模式的优点是延迟初始化和避免竞态条件。延迟初始化可以让程序启动更快,而避免竞态...
在这个资源中,我们将探讨如何使用 Java 客户端连接 Redis 集群,并实现单例模式和集群模式的连接。 Redis 集群 Redis 集群是一种高可用性的 Redis 部署方式,通过将多个 Redis 节点组成一个集群,可以提高整个...
在Java编程中,连接池和单例模式是两个非常重要的概念,它们对于高效地管理和使用数据库资源至关重要。这里我们将深入探讨这两个主题,并结合一个通用的BaseDao类来说明如何实现数据库的快速访问。 首先,连接池是...