A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ①人←①城市 中级黑马   /  2013-4-12 07:49  /  1539 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 ①人←①城市 于 2013-4-13 17:14 编辑

单例在集群和分布式中的应用如何,怎样保持整个系统中只有一个单例?

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

5 个回复

倒序浏览
你的问题的前半部分我不清楚,后半部分,我知道:
单例模式常见的两种:懒汉式单例、饿汉式单例
一、懒汉式单例在类加载的时候不创建单例实例。只有在第一次请求实例的时候的时候创建,并且只在第一次创建后,以后不再创建该类的实例。
单例模式-懒汉式单例
  1. public class LazySingleton {
  2.         /*** 私有静态对象,加载时候不做初始化 */
  3.         private static LazySingleton m_intance = null;
  4.         /*** 私有构造方法,避免外部创建实例 */
  5.         private LazySingleton() {
  6.         }
  7.         /*** 静态工厂方法,返回此类的唯一实例.* 当发现实例没有初始化的时候,才初始化. * @return LazySingleton */
  8.         synchronized public static LazySingleton getInstance() {
  9.                 if (m_intance == null) {
  10.                         m_intance = new LazySingleton();
  11.                 }
  12.                 return m_intance;
  13.         }
  14. }
复制代码
二、饿汉式单例在类被加载的时候,唯一实例已经被创建。这个设计模式在Java中容易实现,在别的语言中难以实现。
单例模式-饿汉式单例
  1. public class EagerSingleton{
  2.         /**私有的(private)唯一(static final)实例成员,在类加载的时候就创建好了单例对象*/
  3.         private static final EagerSingleton m_instance = new EagerSingleton();
  4.         /*** 私有构造方法,避免外部创建实例 */private EagerSingleton(){}//提供了一个空的构造方法
  5.         /*** 静态工厂方法,返回此类的唯一实例.* @return EagerSingleton */
  6.         public static EagerSingleton getInstance(){
  7.                 return m_instance;
  8.                 }
  9.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
王怀亮 发表于 2013-4-12 08:21
你的问题的前半部分我不清楚,后半部分,我知道:
单例模式常见的两种:懒汉式单例、饿汉式单例
一、懒汉式 ...

谢谢你的回答了,虽然没有回答到点子上面,但还是谢谢你抽出时间来阅读这篇帖子.
回复 使用道具 举报
①人←①城市 发表于 2013-4-12 08:32
谢谢你的回答了,虽然没有回答到点子上面,但还是谢谢你抽出时间来阅读这篇帖子. ...

嘿嘿,不好意思,下次有幸为您解答问题,一定好好学习一下,努力做到更好
回复 使用道具 举报
前面一个问题看不懂哈,嘿嘿、、、
怎样保持整个系统中只有一个单例?
针对你这个问题我也觉得挺抽象的,要在整个系统中保持只有一个单列,我理解应该不行吧,我们说的单列是指一个类在内存中只存在一个对象,而如果是有很多类,而且都保证它们在内存中只能存在一个对象岂不是有很多单列了、、、下面是我看视频时做的单列笔记,希望对你有用;
单例设计模式:解决一个类在内存中只存在一个对象。
  保证对象唯一的方式:
  1、为了避免其他程序过多建立该类对象,先禁止其他程序建立该对象;
  2、为了让其他程序可以访问的到该类对象,只好在本类中自定义一个对象;
  3、为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式;
  以上三步的代码的实现:
  将该类的构造函数私有化;
  在该类中创建一个本类对象;
  提供一个方法可以获取到该对象;
  如:class Single{                //饿汉式(一般开发都用,安全)
  private Single(){};
  private static Single s = new Single();
  public static Single getInstance(){
  return s;
  }
  }       
  
                        Class Single{                //懒汉式(不安全,当多个用户使用时,出现线程问题)
        private static Single  s = null;
        privarte Single(){};
        public static Single getInstance(){
                        if(s == null)  //线程问题
                                s= new Single();
                        return s;
        }
  class SingleDemo{
  Public static void main(String args[]){
  Single ss = Single.getInstance();
  }
  }

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报

如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马