Java多线程下的单例模式参考

 更新时间:2016年06月14日 11:19:38   作者:kingxss  
这篇文章主要演示多线程下的单例模式,分别演示了lock和synchronized两种方案,希望能给大家做一个参考。

单例有多种的写法,本例是懒汉式单例的一种写法。在高并发环境下需要注意的是:

1.单例在并发访问并调用其相应的getInstance方法的时候也会造成创建多个实例对象,加锁是必要的。

2.使用synchronized是比较好的解决方案,优点是代码简洁,缺点是在抛出异常的时候不能处理维护使系统处于良好状态。

3.显示的lock设定是良好的解决方案。

使用lock的代码如下:

package demo; 
 
import java.util.concurrent.locks.Lock; 
import java.util.concurrent.locks.ReentrantLock; 
 
/** 
 * 参考使用 
 * @author Watson_Xu 
 * @date 2012-1-8 下午04:31:09 
 */ 
public final class SingletonContext { 
  private static SingletonContext sc = null; 
  private SingletonContext() { 
   
  } 
   
  private static Lock lock = new ReentrantLock(); 
  public static SingletonContext getInstance() { 
    if(sc == null) { 
      lock.lock(); 
      if(sc == null) { 
        try{ 
          sc = new SingletonContext(); 
        } finally { 
          lock.unlock(); 
        } 
      } 
    } 
    return sc; 
  } 
}

使用synchronized的时候代码如下:

package demo; 
 
/** 
 * 参考使用 
 * 
 * @author Watson_Xu 
 * @date 2012-1-8 下午04:31:09 
 */ 
public final class SingletonContext { 
  private static SingletonContext sc = null; 
 
  private SingletonContext() { 
 
  } 
 
  public static synchronized SingletonContext getInstance() { 
    if(null == sc) { 
      sc = new SingletonContext(); 
    } 
    return new SingletonContext(); 
  } 
} 

查看更多Java的语法,大家可以关注:《Thinking in Java 中文手册》、《JDK 1.7 参考手册官方英文版》、《JDK 1.6 API java 中文参考手册》、《JDK 1.5 API java 中文参考手册》,也希望大家多多支持脚本之家。

相关文章

  • Hibernate中获取Session的两种方式代码示例

    Hibernate中获取Session的两种方式代码示例

    这篇文章主要介绍了Hibernate中获取Session的两种方式代码示例,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12
  • Java栈的运用之中缀表达式求值详解

    Java栈的运用之中缀表达式求值详解

    本文来介绍一题中缀表达式求值的问题,就是给定一个中缀计算式,编写程序将这个式子运算结果给计算出来,其实和后缀表达式的思路差不多,都是栈的运用问题,感兴趣的可以了解一下
    2022-11-11
  • java用list集合存储学生信息并算出成绩平均值操作

    java用list集合存储学生信息并算出成绩平均值操作

    这篇文章主要介绍了java用list集合存储学生信息并算出成绩平均值操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • Java线程状态及jstack命令详解

    Java线程状态及jstack命令详解

    jstack是Java虚拟机(JVM)提供的一个非常有用的命令行工具,它允许开发人员和系统管理员在运行时获取Java应用程序的线程堆栈跟踪,在某些情况下,可能需要以管理员或root用户的身份运行jstack命令,这篇文章主要介绍了Java线程状态及jstack命令详解,需要的朋友可以参考下
    2024-03-03
  • Java page cache回写机制案例详解

    Java page cache回写机制案例详解

    这篇文章主要介绍了Java page cache回写机制案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09
  • Eclipse配置Tomcat和JDK步骤图解

    Eclipse配置Tomcat和JDK步骤图解

    这篇文章主要内容是Eclipse配置Tomcat和JDK步骤图解,需要的朋友可以参考下
    2015-08-08
  • Java的布尔类型基本介绍

    Java的布尔类型基本介绍

    这篇文章主要介绍了Java的布尔类型,是Java入门学习中的基础知识,需要的朋友可以参考下
    2015-10-10
  • java jpa如何自定义sql语句

    java jpa如何自定义sql语句

    这篇文章主要介绍了java jpa如何自定义sql语句方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • 解决从Map、JSONObject取不存在键值对时的异常情况

    解决从Map、JSONObject取不存在键值对时的异常情况

    这篇文章主要介绍了解决从Map、JSONObject取不存在键值对时的异常情况,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • 解决Spring在Thread中注入Bean无效的问题

    解决Spring在Thread中注入Bean无效的问题

    这篇文章主要介绍了解决Spring在Thread中注入Bean无效的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02

最新评论