singleton什么是singleton单例模式

singleton  时间:2021-06-04  阅读:()

写一个Singleton类出来,并详细解释每一条语句的作用。

常用的有2种方法: 1)通过成员变量来访问 public class MySingleton { public static final MySingleton singleton = new MySingleton();();//第一次加载类的时候就实例化,static以保证所有的class都使用这一个实例 private MySingleton() { } } 2)这个singleton是不能在外部直接new 出来的。

只能通过MySingleton.getInstance()来访问 public class MySingleton { private static MySingleton signleton; private MySingleton(){// } public static synchronized MySingleton getInstance(){//外部构造实例的方法 if(signleton == null){//如果还不存在,在本类内部实例化一个 return new MySingleton(); }else{ return signleton;//如果已经存在,返回已经存在的实例 } } } 第二种代码看起来舒服点,也是我经常用的,推荐 2楼见笑了,是copy的时候错了。

JAVA问题:singleton是什么意思?

是java开发中常用设计模式的一种。

java的设计模式有一百多种常用的有23种。

就单例模式(也叫单汉模式)来说有饿汉、懒汉之分。

它们的区别是前者不考虑线程直接通过静态方法返回对象,而后者反之。

如何写一个Singleton(单例模式)?

使用线程单列模式获.hibernate.Session对象 .hibernate.Session; .hibernate.SessionFactory; .hibernate.cfg.Configuration;public class HibernateSessionFactory { private static Configuration conf; private static SessionFactory sf; private static ThreadLocal<Session> tl = new ThreadLocal<Session>(); //ThreadLocal<Session>内部是Map结构,用线程id作为key值,用来存放多个Session对象 static { conf = new Configuration(); conf.configure(); sf = conf.buildSessionFactory(); } public static Session getSession() { Session session = tl.get();//以当前线程的id作为Key,取出一个Session对象 if (session == null) { session = sf.openSession();//如果为空,则获取一个新的Session对象,并存入tl中 tl.set(session); } return session; } public static void closeSession() {//关闭一个session Session session = tl.get();//以当前线程的id作为Key,取出一个Session对象 if (session != null) {//如果不为空,怎关闭 session.close(); tl.set(null); } } }

JAVA单例模式的几种实现方法

JAVA 单例模式的几种实现方法 1.饿汉式单例类 package pattern.singleton; // 饿汉式单例类 . 在类初始化时,已经自行实例化 public class Singleton1 { // 私有的默认构造子 private Singleton1() {} // 已经自行实例化 private static final Singleton1 single = new Singleton1(); // 静态工厂方法 public static Singleton1 getInstance() { return single; } } 2. 懒汉式单例类 package pattern.singleton; // 懒汉式单例类 . 在第一次调用的时候实例化 public class Singleton2 { // 私有的默认构造子 private Singleton2() {} // 注意,这里没有 final private static Singleton2 single; // 只实例化一次 static { single = new Singleton2(); } // 静态工厂方法 public synchronized static Singleton2 getInstance() { if (single == null ) { single = new Singleton2(); } return single; } } 在上面给出懒汉式单例类实现里对静态工厂方法使用了同步化,以处理多线程环境。

有些设计师在这里建议使用所谓的 " 双重检查成例 ". 必须指出的是, " 双重检查成例 " 不可以在 Java 语言中使用。

不十分熟悉的读者,可以看看后面给出的小节。

同 样,由于构造子是私有的,因此,此类不能被继承。

饿汉式单例类在自己被加载时就将自己实例化。

即便加载器是静态的,在饿汉 式单例类被加载时仍会将自己实例化。

单从资源利用效率角度来讲,这个比懒汉式单例类稍差些。

从速度和反应时间角度来讲, 则 比懒汉式单例类稍好些。

然而,懒汉式单例类在实例化时,必须处 理好在多个线程同时首次引用此类时的访问限制问题,特别是当单例类作为资源控制器,在实例化时必然涉及资源初始化,而资源 初始化很有可能耗费时间。

这意味着出现多线程同时首次引用此类的机率变得较大。

饿汉式单例类可以在 Java 语言内实现, 但不易在 C++ 内实现,因为静态初始化在 C++ 里没有固定的顺序,因而静态的 m_instance 变量的初始化与类的加载顺序没有保证,可能会出问题。

这就是为什么 GoF 在提出单例类的概念时,举的例子是懒 汉式的。

他们的书影响之大,以致 Java 语言中单例类的例子也大多是懒汉式的。

实际上,本书认为饿汉式单例类更符e69da5e887aae799bee5baa631333335336530合 Java 语 言本身的特点。

3. 登记式单例类 . package pattern.singleton; import java.util.HashMap; import java.util.Map; // 登记式单例类 . // 类似 Spring 里面的方法,将类名注册,下次从里面直接获取。

public class Singleton3 { private static Map<String,Singleton3> map = new HashMap<String,Singleton3>(); static { Singleton3 single = new Singleton3(); map.put(single.getClass().getName(), single); } // 保护的默认构造子 protected Singleton3(){} // 静态工厂方法 , 返还此类惟一的实例 public static Singleton3 getInstance(String name) { if (name == null ) { name = Singleton3. class .getName(); System.out.println("name == null"+"--->name="+name); } if (map.get(name) == null ) { try { map.put(name, (Singleton3) Class.forName(name).newInstance()); } catch (InstantiationException e) { e.printStackTrace(); } catch (essException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } return map.get(name); } // 一个示意性的商业方法 public String about() { return "Hello, I am RegSingleton."; } public static void main(String[] args) { Singleton3 single3 = Singleton3.getInstance( null ); System.out.println(single3.about()); } }

什么是singleton单例模式

singleton 英[?s??glt?n] 美[?s??ɡ?lt?n] n. 一个,独身,单独; [网络] 单例; 单例模式; 单件; [例句]Bank is a 38-year-old singleton who grew up in Philadelphia. 班克是一名38岁的单身汉,在费城长大。

[其他] 复数:singletons

RAKsmart 黑色星期五云服务器七折优惠 站群服务器首月半价

一年一度的黑色星期五和网络星期一活动陆续到来,看到各大服务商都有发布促销活动。同时RAKsmart商家我们也是比较熟悉的,这次是继双十一活动之后的促销活动。在活动产品中基本上沿袭双11的活动策略,比如有提供云服务器七折优惠,站群服务器首月半价、还有新人赠送红包等活动。如果我们有需要RAKsmart商家VPS、云服务器、独立服务器等产品的可以看看他们家的活动。这次活动截止到11月30日。第一、限时限...

老用户专享福利 腾讯云 免费领取轻量云2核4G服务器一年

感恩一年有你!免费领取2核4G套餐!2核4G轻量应用服务器2核 CPU 4GB内存 60G SSD云硬盘 6Mbps带宽领取地址:https://cloud.tencent.com/act/pro/lighthousethankyou活动规则活动时间2021年9月23日 ~ 2021年10月23日活动对象腾讯云官网已注册且完成实名认证的国内站用户(协作者与子用户账号除外),且符合以下活动条件:账号...

青云互联:香港安畅CN2弹性云限时首月五折,15元/月起,可选Windows/可自定义配置

青云互联怎么样?青云互联是一家成立于2020年的主机服务商,致力于为用户提供高性价比稳定快速的主机托管服务,目前提供有美国免费主机、香港主机、韩国服务器、香港服务器、美国云服务器,香港安畅cn2弹性云限时首月五折,15元/月起;可选Windows/可自定义配置,让您的网站高速、稳定运行。点击进入:青云互联官方网站地址青云互联优惠码:八折优惠码:ltY8sHMh (续费同价)青云互联香港云服务器活动...

singleton为你推荐
winhttp什么是WinHTTP草莓派如何最简单的制作出好吃的草莓派?Honeypotnc如何使用csonline2反恐精英online2什么时候出iso20000认证iso20000认证流程是怎样的腾讯年终奖腾讯工作怎么样自定义表情qq自定义表情自定义表情QQ自定义表情小四号字Excel小四号字等于几号字js后退多级页面间的后退如何实现(js方法)
浙江vps vps优惠码cnyvps asp.net主机 韩国加速器 win8升级win10正式版 免费ddos防火墙 免费个人网站申请 毫秒英文 微信收钱 速度云 域名接入 息壤代理 免费网页申请 购买国外空间 申请免费空间和域名 国外视频网站有哪些 空间租赁 免费外链相册 ebay注册 我的世界服务器ip 更多