- 浏览: 129515 次
- 性别:
- 来自: 河北
文章分类
- 全部博客 (93)
- 生活感悟 (1)
- 面试 (3)
- struts2 (1)
- java 综合 (25)
- 杂 (4)
- 数据库综合 (3)
- 数据库-Mysql (2)
- 数据库-SQLServer (0)
- 数据库-Oracle (0)
- 数据库-PostgreSQL (0)
- 数据库-SQLite (0)
- 数据库-MongoDB (0)
- 数据库-Redis (0)
- 操作系统-Windows (4)
- 操作系统-Linux (0)
- 操作系统-Mac (0)
- 操作系统-Unix (0)
- 移动端-Android (0)
- 移动端-IOS (0)
- 开发环境-Eclipse (1)
- 开发环境-IntelliJ IDEA (0)
- JEE-Spring (1)
- JEE-Hibernate (0)
- JEE-Struts2 (1)
- JEE-Struts (0)
- JEE-Spring Cloud (0)
- JEE-Spring Boot (0)
- JEE-接口调试 (0)
- 云计算-Zookeeper (0)
- 云计算-Hadoop (0)
- 云计算-HBase (0)
- 测试-JUnit (0)
- 测试-JMeter (0)
- 项目管理 (0)
- 版本控制 (0)
- 消息中间件 (0)
- 应用服务器-Tomcat (2)
- 应用服务器-Jetty (0)
- 框架-Antlr (0)
- 编程语言-Java (1)
- 编程语言-C# (0)
- 编程语言-C (0)
- 编程语言-Python (0)
- 编程语言-Lua (0)
- 编程语言-Javascript (0)
最新评论
-
java苏打粉:
...
java servlet doPost与doGet方法的理解 -
真狼王:
将禁用脚本测试(Internet Exploer)和禁用脚本调 ...
ie下调试javascript -
javaservers:
说了个大概原理,没做任何实现那。
JDBC连接池 -
yangzhihuan:
都是些实用的技巧.整理是很辛苦了,多谢分享.
jquery 常用技巧
今天在写一个东西需要用的单例模式,一般的单列模式可分为以下两种:
1 饿汉式:
public class Singleton{
private static Singleton singleton = new Singleton ();
private Singleton (){}
public Singleton getInstance(){return singletion;}
}
2 懒汉式:
public class Singleton{
private static Singleton singleton = null;
public static Singleton getInstance(){
if(singleton==null){
singleton = new Singleton();
}
return singleton;
}
}
安全分析:
1 从线程角度:
从线程角度看,我们会发现,饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变,懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的,所以在使用懒汉式时我们的考虑到线程安全问题
改进后的懒汉式:
public class Singleton{
private static Singleton singleton = null;
public static synchronized Singleton getInstance(){
if(singleton==null){
singleton = new Singleton();
}
return singleton;
}
}
2 从安全角度:
ok,线程安全我们解决了,但是对于有些对系统的安全要求再高些的那,比如:操作系统的权限,
提醒下,在享有特权的客户可以借助AccessibleObject.setAccessible方法,通过反射机制来调用你的私有构造器。如果你的系统需要的安全级别比较高的话,为了抵御这用攻击,可以修改构造器,让它在被要求创建第二个实例的时候抛出异常。
3 从序列化角度:
我有时候会用到序列化,那怎样保证单例模式的安全?难道就仅仅在声明中加上”implements Serializable“就可以?这不够的,为了保证单列,我们还得声明所有实例域都是瞬时的,并提供一个readResolve方法,否则我们每次反序列化一个序列化的实例时,都会创建一个新实例,针对需要序列化的,我们可以加上这个方法:
private Object readResolve(){
return singleton;
}
这只是我所想到和看到的,当然有不足之处还请大家多指教!
1 饿汉式:
public class Singleton{
private static Singleton singleton = new Singleton ();
private Singleton (){}
public Singleton getInstance(){return singletion;}
}
2 懒汉式:
public class Singleton{
private static Singleton singleton = null;
public static Singleton getInstance(){
if(singleton==null){
singleton = new Singleton();
}
return singleton;
}
}
安全分析:
1 从线程角度:
从线程角度看,我们会发现,饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变,懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的,所以在使用懒汉式时我们的考虑到线程安全问题
改进后的懒汉式:
public class Singleton{
private static Singleton singleton = null;
public static synchronized Singleton getInstance(){
if(singleton==null){
singleton = new Singleton();
}
return singleton;
}
}
2 从安全角度:
ok,线程安全我们解决了,但是对于有些对系统的安全要求再高些的那,比如:操作系统的权限,
提醒下,在享有特权的客户可以借助AccessibleObject.setAccessible方法,通过反射机制来调用你的私有构造器。如果你的系统需要的安全级别比较高的话,为了抵御这用攻击,可以修改构造器,让它在被要求创建第二个实例的时候抛出异常。
3 从序列化角度:
我有时候会用到序列化,那怎样保证单例模式的安全?难道就仅仅在声明中加上”implements Serializable“就可以?这不够的,为了保证单列,我们还得声明所有实例域都是瞬时的,并提供一个readResolve方法,否则我们每次反序列化一个序列化的实例时,都会创建一个新实例,针对需要序列化的,我们可以加上这个方法:
private Object readResolve(){
return singleton;
}
这只是我所想到和看到的,当然有不足之处还请大家多指教!
发表评论
-
Webservice 报错 Have you run APT to generate them
2013-08-27 10:23 922原因是找不到类 ,生成webservice 后自运生成包装类, ... -
java 命名规则
2010-11-27 11:43 980变量 第一位为英文小写字母,该英文小写字母代表变数类型。然后 ... -
HashSet和TreeSet的区别
2010-11-27 11:32 994今天学到的,备注一下: 1、Treeset中的数据是自 ... -
java的静态方法和非静态方法
2010-11-27 00:02 849public class Test { p ... -
java之try与finally语句(2)
2010-11-26 23:55 928接上一篇,跟上一篇代码差不多,就是修改了a的值为double类 ... -
java try finally
2010-11-26 23:50 988如下面的代码,结果就不解释了。 Java代码 pub ... -
抽象类和接口区别
2010-11-26 23:47 851如下代码,是使用接口时需要注意的问题。 Java代码 pu ... -
java之final, finally, finalize的区别
2010-11-26 23:44 9651. final 用于声明属性,方法和类,分别表示属性不可变, ... -
求最小公倍数和最大公约数
2010-11-26 23:42 733下面的方法是用递归解决的。如求几个整数的最小公倍数的 ... -
java汉字截取问题
2010-11-26 23:40 778public class Test { p ... -
java之String变量和“==”操作符(1)
2010-11-26 23:26 913先看下面的代码,有助于后面的理解。 Java代码 p ... -
java之String变量和“==”操作符(2)
2010-11-26 23:18 798Java代码 public class StringTest ... -
java 之动态绑定和静态绑定
2010-11-26 22:59 853package cn.lifx.test; pub ... -
java基础之"=="操作符
2010-11-26 21:16 622Java代码 public class Test { ... -
java 内部类测试
2010-11-26 20:53 966Java代码 public class OuterInner ... -
java 之继承
2010-11-26 20:48 765public class Test { p ... -
java catch 语句
2010-11-26 20:44 1022public class Test { p ... -
java try catch exception
2010-11-26 20:40 1144public class InputTest { ... -
java类的初始化
2010-11-26 20:35 777Java代码 public class Test1 ... -
无法进入构造方法
2010-11-26 20:32 802刚刚搞定了一个大bug 搞了好几个小时了 问题很简单 ...
相关推荐
在Java中,有多种实现单例模式的方法,每种都有其特点和适用场景。接下来,我们将深入探讨这些实现方式。 首先,我们来看**懒汉式(Lazy Initialization)**。这种实现方式是在类被首次请求时才创建单例对象,延迟...
Java中的单例模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供全局访问点。在Java编程中,单例模式常用于控制资源的访问,比如数据库连接池、线程池或者日志对象等。本篇文章将深入探讨如何在Java中...
### Java 单例模式详解 #### 一、什么是单例模式? 单例模式是一种常用的软件设计模式,在这种模式中,一个类只能拥有一个实例,并且该类必须自行创建并提供这个实例。通常,单例模式用于确保某个类在整个应用程序...
Java单例模式是一种常用的设计模式,它保证一个类只有一个实例,并提供全局访问点。这种模式在需要频繁创建和销毁对象的场景中,或者当对象昂贵时(如数据库连接),能够节省系统资源,提高效率。本篇文章将深入探讨...
Java中懒汉单例设计模式线程安全测试,单例设计模式的测试
### 使用Java单例模式实现一个简单的日志记录器 #### 一、单例模式简介 单例模式是一种常用的软件设计模式,在该模式中,一个类只能创建一个实例,并且提供了一个全局访问点来访问该实例。单例模式的主要优点包括...
Java 单例模式线程安全问题详解 Java 单例模式线程安全问题是指在 Java 中实现单例模式时,如何确保线程安全的问题。单例模式是指在整个应用程序生命周期中,只有一个实例存在的设计模式。这种模式可以提高性能,...
### JAVA单例模式的几种实现方法 #### 一、饿汉式单例模式 饿汉式单例模式是在类初始化时就已经完成了实例化的操作。这种模式下,类一旦被加载,就会创建一个单例对象。 ##### 代码示例: ```java class ...
Java单例模式是一种常见的设计模式,它在软件工程中用于控制类的实例化过程,确保一个类只有一个实例,并提供一个全局访问点。这种模式在系统资源管理、缓存、日志记录等方面应用广泛。下面我们将深入探讨Java单例...
在Java编程中,单例模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供一个全局访问点。这种模式在需要频繁创建和销毁对象的场景中尤其有用,因为它可以节省系统资源并确保对象间的协调一致。以下是...
Java单例类详解 Java单例类是一种常见的设计模式,具有三个特点:单例类只能有一个实例、单例类必须自己创建自己的唯一实例、单例类必须给所有其他对象提供这一实例。单例模式可以分为三种:懒汉子式单例、饿汉子式...
在Java中,单例模式的实现通常有几种方法: 1. **饿汉式(静态常量)**:在类加载时就完成初始化,所以类加载比较慢,但获取对象的速度快,且线程安全。 ```java public class Singleton { private static final ...
Java单例模式是一种设计模式,它允许...以上就是关于Java单例模式的深入理解和常见实现方式,希望对你理解单例模式有所帮助。在实际开发中,灵活运用并结合具体场景选择合适的单例模式将有助于提高代码质量和可维护性。
Java单例模式是一种设计模式,它保证一个类只有一个实例,并提供一个全局访问点。在数据库连接管理中,使用单例模式能有效控制资源,避免频繁创建和关闭数据库连接导致的性能损失和资源浪费。以下是对Java单例模式...
Java单例模式及实现 Java单例模式是一种常见的设计模式,确保某一个类只有一个实例,而且向这个系统提供这个实例。单例模式可以分为三种:懒汉式单例、饿汉式单例、登记式单例。 单例模式的要点 1. 某个类只能有...
Java单例模式是一种常用的设计模式,它用于保证一个类只有一个实例,并提供全局访问点。这种模式在系统资源有限或者需要共享昂贵对象时尤其有用,比如数据库连接池、线程池等。下面我们将深入探讨Java单例模式的实现...