- 浏览: 414961 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (158)
- SpringBoot (10)
- vue.js (4)
- 2017基础知识 (2)
- jquery (4)
- extjs (8)
- spring (13)
- Java基础 (24)
- ibatis (2)
- oracle (18)
- 服务器配置 (8)
- maven (7)
- web应用开发 (14)
- 数据库 (9)
- 第三方依赖 (3)
- 百味人生 (7)
- svn (1)
- 问题一堆 (2)
- 测试驱动开发 (1)
- webServices (2)
- 网络编程 (2)
- 其它 (4)
- hibernate (2)
- ec标签序号列 (1)
- javascript (1)
- ActiveMQ (2)
- linux (5)
- UI (1)
- 问题汇集 (1)
- redis (1)
最新评论
-
jackson200:
讲解的狠不错!谢谢!
spring注入原理 -
阳光泛滥的日子:
讲的很透彻,受教了 。
spring中注解的实现原理 -
liudechao9:
最近在研究这方面,很不错,但是多线程并发的时候可能会出问题,而 ...
spring中注解的实现原理 -
小帅1127:
厉害啊 我的哥
spring中注解的实现原理 -
phoenixpaul:
...
Oracle存储过程和程序包
说明:如果要保证系统里一个类最多只能存在一个实例时,我们就需要单例模式。
这种情况在我们应用中经常碰到,例如缓存池、数据库连接池、线程池、一些应用服务实例等。
在高并发环境中,可能会创建多个对象实例,这时候只要加入synchronized关键字,就能保证线程安全了
package com.yt.manager.javamodel.singleton; import org.apache.log4j.Logger; /** * Java单例模式 * 说明:如果要保证系统里一个类最多只能存在一个实例时,我们就需要单例模式。 * 这种情况在我们应用中经常碰到,例如缓存池、数据库连接池、线程池、一些应用服务实例等。 * 在高并发环境中,可能会创建多个对象实例,这时候只要加入synchronized关键字,就能保证线程安全了 * @author zxf * */ public class SingletonIndex { Logger log = Logger.getLogger(SingletonIndex.class); // 1、为了限制该类的对象被随意创建,我们要保证该类的构造方法是私有的,这样外部类就无法创建该类的对象了 private SingletonIndex() { log.info("初始化了............"); } private static SingletonIndex singletionTest; //2、为了给外部对象提供此单例对象的访问,我们为它提供了一个全局访问点 public static synchronized SingletonIndex getInstance() { if (singletionTest == null) { singletionTest = new SingletonIndex(); } return singletionTest; } int value = 0; public int getValue() { return value; } public void setValue(int value) { this.value = value; } /** * @param args */ public static void main(String[] args) { SingletonIndex test1 = singletionTest.getInstance(); test1.setValue(10); SingletonIndex test2 = singletionTest.getInstance(); System.out.println(test1 == test2); System.out.println("value:" + test2.getValue()); } }
在SingletonTest类中虽然实现了多线程的安全访问,但是在多线程高并发的情况下,
给getInstance()方法加上synchronized会使性能大不如前。我们仔细分析一下并不难发现,
使用了synchronized关键子对整个getInstance()方法同步是没有必要的。我们只要保证实例化
这个单例对象的那段逻辑被一个线程执行就可以了,而返回引用的那段代码是没有必要进行同步的。
package com.yt.manager.javamodel.singleton; import org.apache.log4j.Logger; /** * @author zxf */ public class DoubleCheckSingletion { Logger log = Logger.getLogger(DoubleCheckSingletion.class); private DoubleCheckSingletion() { log.info("初始化了............"); } private static DoubleCheckSingletion singletionTest; public static DoubleCheckSingletion getInstance() { if (singletionTest == null) { synchronized (DoubleCheckSingletion.class) { if (singletionTest == null) { singletionTest = new DoubleCheckSingletion(); } } } return singletionTest; } int value = 0; public int getValue() { return value; } public void setValue(int value) { this.value = value; } /** * @param args */ public static void main(String[] args) { DoubleCheckSingletion test1 = singletionTest.getInstance(); test1.setValue(10); DoubleCheckSingletion test2 = singletionTest.getInstance(); System.out.println(test1 == test2); System.out.println("value:" + test2.getValue()); } }
发表评论
-
采用DES加密解密实现接口的通信加密认证
2018-08-22 09:20 807DES全称Data Encryption Standard, ... -
log4j2 配置
2016-01-06 17:10 71661、log4j2官方下载地址h ... -
本文出一个简单读取JVM内存使用情况的例子
2015-12-07 15:16 792<%@page contentType="t ... -
代替request.getRealPath()
2014-03-21 11:22 1019代替request.getRealPath(); ... -
session超时时间设置方法
2012-11-05 15:11 1140由于session值之前没有设置,以至于刚登录的 ... -
ant 使用
2012-06-25 11:41 1252build.xml <?xml version=&qu ... -
ant 使用
2012-06-25 11:39 2build.xml <?xml version=&qu ... -
java中的排序
2012-02-15 10:01 1027/** * 选择排序:首先第一趟从n个元素中找到最大或最小 ... -
封装类比较出现的问题
2011-10-09 10:24 1190Java为了性能提供了一个类似缓存的东西,不仅仅 ... -
java多线程三:线程同步
2011-07-20 11:21 1593多线程编程是很有趣的事情,它常常容易出现"错误 ... -
java多线程二:控制线程方法
2011-07-20 10:25 1012join线程: 1、Thread线程提供了让一个线程等待另外 ... -
java多线程一:概念与原理
2011-07-19 16:13 11651、线程是什么? ... -
java多线程
2011-07-19 15:06 31、线程是什么? 几乎所有的操作系统都支持 ... -
java多线程
2011-07-19 15:05 21、线程是什么? 几乎所有的操作系统都支持同事运 ... -
java多线程
2011-07-19 15:05 11、线程是什么? 几乎所有的操作系统都支持同事运行多 ... -
java多线程
2011-07-19 14:56 3http://lavasoft.blog.51cto.com/ ... -
java中的IO操作
2011-07-13 14:54 11211、 Java 的 IO 支持通过 ja ... -
多线程下载文件
2011-07-13 14:11 5226网络蚂蚁、FlashGet、迅 ... -
Java垃圾回收机制
2011-07-06 16:55 14971、当程序创建对象时, ... -
java反射机制
2011-06-02 14:06 1024一、定义: 1、在Java运行时环境中,对于任意 ...
相关推荐
Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式...
单例模式是软件设计模式中的一种经典模式,用于确保一个类只有一个实例,并提供一个全局访问点。在Java中,有多种实现单例模式的方法,每种都有其特点和适用场景。接下来,我们将深入探讨这些实现方式。 首先,我们...
实用Java的单例模式,实用于Java学习者 单例模式 单例模式
在Java编程中,单例模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供一个全局访问点。这种模式在需要频繁创建和销毁对象的场景中尤其有用,因为它可以节省系统资源并确保对象间的协调一致。以下是...
单例模式是软件设计模式中的一种经典模式,其主要目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式在Java中广泛应用于控制资源的共享,例如数据库连接池、线程池或者配置对象等。在Java中,通常有三种...
Java中的单例模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供全局访问点。在Java编程中,单例模式常用于控制资源的访问,比如数据库连接池、线程池或者日志对象等。本篇文章将深入探讨如何在Java中...
单例模式是一种常用的软件设计模式,在这种模式中,一个类只能拥有一个实例,并且该类必须自行创建并提供这个实例。通常,单例模式用于确保某个类在整个应用程序生命周期中只存在一个实例,这有助于节省资源并简化对...
单例模式是软件设计模式中的一种,用于控制类的实例化过程,确保一个类只有一个实例,并提供全局访问点。在Java中,实现单例模式有多种方法,每种方法都有其特点和适用场景。以下是对这六种常见单例模式实现方式的...
Java中懒汉单例设计模式线程安全测试,单例设计模式的测试
Java中的单例模式是一种设计模式,它用于保证一个类只有一个实例,并提供一个全局访问点。这种模式在系统中需要控制实例数量,特别是当这个实例需要频繁地被多个对象共享时非常有用,例如数据库连接池、线程池或者...
单例模式是设计模式中的一种,它在Java编程中被广泛应用,主要目的是限制类的实例化,确保在程序运行期间,对于某个特定类,只存在一个全局共享的对象。这种模式通常用于那些需要频繁实例化然后销毁,或者创建代价...
Java 单例模式 懒汉模式 //懒汉式 多线程中不可以保证是一个对象
**代码**文件则提供了实际的Java实现,通过查看这些代码,我们可以看到单例模式和工厂模式如何在实践中被运用,包括类的定义、方法的实现以及如何通过代码调用来创建和管理对象。 总的来说,这个项目为学习和理解...
例如,MVC模式在Web应用开发中非常常见,单例模式常用于日志服务、数据库连接池等需要全局唯一的场景,代理模式可以用于数据访问控制,工厂模式则用于解耦对象的创建和使用。通过学习和实践这些模式,开发者可以更好...
通过单例模式实例化获取propertyUtil 工具包实例,高效加载配置文件,java语言编写。通过单例模式实例化获取propertyUtil 工具包实例,高效加载配置文件,java语言编写。通过单例模式实例化获取propertyUtil 工具包...
### Java单例模式应用研究 #### 一、单例模式概述 单例模式(Singleton Pattern)作为一种最基本的创建型设计模式,其主要目的是控制一个类的实例化过程,确保在整个应用程序中仅存在一个实例,并且该实例能够被全局...
Java单例模式是一种设计模式,它允许在程序中创建唯一一个类实例,通常用于管理共享资源,例如数据库连接、线程池或者配置对象等。单例模式的核心在于限制类的构造函数,确保类只能被初始化一次,从而实现全局唯一的...
在这些模式中,单例模式是最为广泛使用的一种。单例模式确保一个类只有一个实例,并提供一个全局访问点,使得在整个应用程序中,无论何处都可以方便地调用这个唯一的实例。 单例模式的主要优点在于它可以控制实例化...
Java的单例模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供全局访问点。在Android开发中,单例模式的应用尤其广泛,因为它能够有效管理资源,减少内存开销,提高性能。以下是对单例模式在Android中...