单例模式线程安全问题

//饥汉模式  本身是一种线程安全的方法,再类创建的时候,对象就生成了,所以不存在线程同步的问题

缺点:项目启动比较慢

public class Singleton {

  private static final Singleton instance = new Singleton();

  private Singleton() {
  }

  public static Singleton getSingleton() {
    return instance;
  }

}

//懒汉模式,存在线程安全

可以在public static方法上加synchronized修饰但是效率低

时间: 2024-10-28 14:30:07

单例模式线程安全问题的相关文章

单例模式与线程安全问题浅析

近期看到到Struts1与Struts2的比較.说Struts1的控制器是单例的,线程不安全的:Struts2的多例的,不存在线程不安全的问题.之后又想到了之前自己用过的HttpHandler... 这些类.好像单例的线程安全问题确实是随处可见的. 可是仅仅是知道这个是不安全的,也没有认真分析过.接下来就细致分析下. 一,改动单例模式代码 首先我先写一段单例类的代码: /** * @ClassName: Sigleton * @Description: 单例类 * @author 水田 * @d

设计模式——单例模式(Java)——考虑多线程环境下的线程安全问题

设计模式--单例模式(Java)--考虑多线程环境下的线程安全问题 一:单例模式概念 单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例的特殊类.通过单例模式可以保证系统中一个类只有一个实例 二:单例模式的实现方式 特别注意,在多线程环境下,需要对获取对象实例的方法加对象锁(synchronized) 方式一:(懒汉式)程序执行过程中需要这个类的对象,再实例化这个类的对象 步骤: 1.定义静态私有对象 2.构造方法私有化保证在类的外部无法实例化该类的对象 3.定义对外开放的静

单例模式(上)---如何优雅地保证线程安全问题

上次帅地问的问题,让小秋学习了不少.这几天小秋刚好学习了一些设计模式的知识,这不,又跑去找帅地探讨一些问题了. 粗糙的同步 小秋:地哥,上次你问的问题,让我收获颇多,这些天我大致研究了下设计模式,帅地有什么指教的吗? 帅地:小子,行啊.那我再考考你得了. 此刻小秋聚精会神着等帅地又会抛出哪些问题-.. 帅地:学过单例模式吧?单例模式有多种写法,写一种出来看看. 小秋:好啊,听说单例模式是面试中问的最多的一种模式,对于单例模式的几种的写法,我可以相当熟练哦(有点得意). 于是,小秋甩手就写了一种懒

单例模式的线程安全问题小结

单例会带来什么问题? 如果多个线程同时调用这个实例,会有线程安全的问题 单例一般用在什么地方? 单例的目的是为了保证运行时只有唯一的一个实例,最常用的地方比如拿到数据库的连接,或者Spring的中创建BeanFactory操作,而这些操作都是调用他们的方法来执行某个特定的动作. 首先先来认识下两种模式:  恶汉式  懒汉式 public class MyFactory { // //饿汉式 立即创建 // private static MyFactory instance = new MyFac

java线程安全问题之静态变量、实例变量、局部变量

Java多线程编程中,存在很多线程安全问题,至于什么是线程安全呢,给出一个通俗易懂的概念还是蛮难的,如同<java并发编程实践>中所说: 写道 给线程安全下定义比较困难.存在很多种定义,如:"一个类在可以被多个线程安全调用时就是线程安全的". 此处不赘述了,首先给出静态变量.实例变量.局部变量在多线程环境下的线程安全问题结论,然后用示例验证,请大家擦亮眼睛,有错必究,否则误人子弟! 静态变量:线程非安全. 静态变量即类变量,位于方法区,为所有对象共享,共享一份内存,一旦静态

servlet/struts1/struts2/spring mvc 的线程安全问题

线程安全的概念: 如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码.如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的. 线程安全问题都是由全局变量及静态变量引起的. 若每个线程中对全局变量.静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的:若有多个线程同时执行写操作,一般都需要考虑线程同步,否则的话就可能影响线程安全. 在Java里,线程安全一般体现在两个方面:  1.多个thread对同一个java

浅析Struts1和Struts2的Action线程安全问题

[问题描述]最近公司安排我面试Java的FreshMan,面试者一般是工作1年多点的新人(这里我就装老一下,其实我也才工作3年不到),在被问及Struts1和Struts2的Action的线程安全问题的时候,大多是支支吾吾,答不出所以然.所以在这里我整理一下我个人的理解. [问题答案] 这是由于Servlet的工作原理产生的.我们先来简单回顾一下Servlet的生命周期“初始化->init->service->destroy->卸载”. 这里大家都知道,我们在web.xml里面定义

关于java Servlet,Struts,springMVC 的线程安全问题

现在主流的java的前端框架有:struts1,struts2,springmvc 还有最根本的servlet; 前些天一个朋友问我这方面的问题,就研究一番: 1.关于struts1: Struts1使用的ActionServlet是单例的,由这一个servlet处理所有.do请求.RequestProcessor也是单例. RequestProcessor的processActionCreate方法: /**   * <p>Return an <code>Action</c

浅析Struts1和Struts2的Action线程安全问题 转

浅析Struts1和Struts2的Action线程安全问题  转 http://blog.csdn.net/virgoboy2004/article/details/5876133 [问题描述]最近公司安排我面试Java的FreshMan,面试者一般是工作1年多点的新人(这里我就装老一下,其实我也才工作3年不到),在被问及Struts1和Struts2的Action的线程安全问题的时候,大多是支支吾吾,答不出所以然.所以在这里我整理一下我个人的理解. [问题答案] 这是由于Servlet的工作