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

ProfitServer$34.56/年,5折限时促销/可选西班牙vps、荷兰vps、德国vps/不限制流量/支持自定义ISO

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

spinservers:圣何塞10Gbps带宽服务器月付$109起,可升级1Gbps无限流量

spinservers是Majestic Hosting Solutions LLC旗下站点,主营国外服务器租用和Hybrid Dedicated等,数据中心在美国达拉斯和圣何塞机房。目前,商家针对圣何塞部分独立服务器进行促销优惠,使用优惠码后Dual Intel Xeon E5-2650L V3(24核48线程)+64GB内存服务器每月仅109美元起,提供10Gbps端口带宽,可以升级至1Gbp...

Vultr VPS韩国首尔机房速度和综合性能参数测试

Vultr 商家有新增韩国首尔机房,这个是继日本、新加坡之后的第三个亚洲机房。不过可以大概率知道肯定不是直连中国机房的,因为早期的日本机房有过直连后来取消的。今天准备体验看看VULTR VPS主机商的韩国首尔机房的云服务器的速度和性能。1、全球节点PING速度测试这里先通过PING测试工具看看全球几十个节点的PING速度。看到好像移动速度还不错。2、路由去程测试测试看看VULTR韩国首尔机房的节点...

singleton为你推荐
vga接口定义电脑显示屏VGA是什么意思搜索引擎的概念搜索引擎的工作原理是什么及发展历史awv如何把普通电影转换成AWV模式识别算法模式识别的简史什么是生态系统生态系统的结构是什么移动硬盘文件或目录损坏且无法读取移动硬盘文件或目录损坏且无法读取怎么办??中信银行理财宝中信银行理财宝可以长期存款吗?人脸识别解锁手机解锁的人脸识别怎么设置点心os什么是点心os?手机操作系统和手机区别么?一个是硬件一个是软件?听说炒的好火?网站推广软件破解版免费的网站推广软件,破解版
深圳虚拟主机 青岛虚拟主机 域名停靠 服务器配置技术网 mach5 permitrootlogin 12306抢票攻略 天猫双十一秒杀 patcha 512m内存 ev证书 嘉洲服务器 日本bb瘦 hkt hktv 电信主机 免费mysql数据库 域名与空间 阿里云官方网站 智能dns解析 更多