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

舍利云30元/月起;美国CERA云服务器,原生ip,低至28元/月起

目前舍利云服务器的主要特色是适合seo和建站,性价比方面非常不错,舍利云的产品以BGP线路速度优质稳定而著称,对于产品的线路和带宽有着极其严格的讲究,这主要表现在其对母鸡的超售有严格的管控,与此同时舍利云也尽心尽力为用户提供完美服务。目前,香港cn2云服务器,5M/10M带宽,价格低至30元/月,可试用1天;;美国cera云服务器,原生ip,低至28元/月起。一、香港CN2云服务器香港CN2精品线...

bgpto:日本独立服务器6.5折($120起),新加坡独立服务器7.5折($93起)

bgp.to在对日本东京的独立服务器进行6.5折终身优惠促销,低至$120/月;对新加坡独立服务器进行7.5折终身优惠促销,低至$93/月。所有服务器都是直连国内,速度上面相比欧洲、美国有明显的优势,特别适合建站、远程办公等多种用途。官方网站:https://www.bgp.to/dedicated.html主打日本(东京、大阪)、新加坡、香港(CN)、洛杉矶(US)的服务器业务!日本服务器CPU...

ProfitServer$34.56/年,西班牙vps、荷兰vps、德国vps/不限制流量/支持自定义ISO

profitserver怎么样?profitserver是一家成立于2003的主机商家,是ITC控股的一个部门,主要经营的产品域名、SSL证书、虚拟主机、VPS和独立服务器,机房有俄罗斯、新加坡、荷兰、美国、保加利亚,VPS采用的是KVM虚拟架构,硬盘采用纯SSD,而且最大的优势是不限制流量,大公司运营,机器比较稳定,数据中心众多。此次ProfitServer正在对德国VPS(法兰克福)、西班牙v...

singleton为你推荐
自动识别查询快递单号怎样在网上查快递单号iso20000认证iso20000认证流程是怎样的视频技术学习短视频需要准备什么?怎么去做呢?华为总裁女儿为啥姓孟孟晚舟是谁搜索引擎的概念7 什么是搜索引擎?如何在Internet上搜索图片和文字资料的?assemblyinfoasp.net这几个文件是干什么的?assemblyinfo求教如何修改AssemblyInfo.cs的版本号印度尼西亚国家代码谁知道世界各国的国家电话代码?jstz江苏泰州市地税如何申报?微信智能机器人微信群机器人是怎么实现的
淘宝二级域名 3322免费域名 万网域名证书查询 樊云 鲜果阅读 ubuntu更新源 好看的桌面背景图片 hkt 流媒体加速 江苏双线服务器 银盘服务 新睿云 华为云服务登录 空间登入 西安服务器托管 photobucket 服务器防火墙 闪讯网 服务器机柜 comodo 更多