辛格尔顿

辛格尔顿

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

辛格尔顿(Singleton),以保证一个类只有一个实例,并提供了一个全球性的接入点访问它。

因为辛格尔顿Singleton它的类封装的唯一实例,因此,它可以妍格控制客户如何以及何时访问它访问。

简单地说,它是受控访问的唯一的例子。

package gof23;

public class SingletonTest {
	public static void main(String[] args) {
		Singleton obj1 = Singleton.getInstance();
		Singleton obj2 = Singleton.getInstance();
		System.out.println(obj1 == obj2);
	}
}

class Singleton {
	private static Singleton instance = null;
	
	private Singleton() {     //构造方法让其private,这就堵死了外界利用new创建此类实例的可能
		
	}
	
	public static Singleton getInstance(){
		if(instance == null) {
			instance = new Singleton();
		}
		return instance;
	}
}

结果为:

true

多线程时的单例

多线程的程序中,多个线程同一时候,注意是同一时候訪问Singleton类,调用getInstance()方法,会有可能造成创建多个实例,这个时候能够给进程加一把锁进行处理。

package gof23;

import java.util.concurrent.locks.ReentrantLock;

public class SingletonTest {
	public static void main(String[] args) {
		Singleton obj1 = Singleton.getInstance();
		Singleton obj2 = Singleton.getInstance();
		System.out.println(obj1 == obj2);
	}
}

class Singleton {
	private static Singleton instance = null;
	private static ReentrantLock lock = new ReentrantLock();
	private Singleton() {     //构造方法让其private,这就堵死了外界利用new创建此类实例的可能
		
	}
	
	public static Singleton getInstance(){
		if(instance == null) {
			lock.lock();      //先推断实例是否存在,不存在在加锁处理,能够避免每次调用getInstance方法都须要lock
			try {
				if(instance == null) {        //双重锁定
					instance = new Singleton();
				}
			}
			finally {
				lock.unlock();      //释放锁
			}
		}
		return instance;
	}
}

执行结果为:

true

版权声明:本文博客原创文章。博客,未经同意,不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117709.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • matlab中coef是什么,LinearRegression()中的coef_U值代表什么?

    matlab中coef是什么,LinearRegression()中的coef_U值代表什么?我是机器学习的初学者。这只是一个简单的问题,LinearRegression()中的coef帴代表什么?我知道它代表的是系数,但我不明白这些值,高的和正的系数意味着更强的关系吗?在而且,如果coef_u值是指数型的,这是否意味着我的线性回归是错误的?在array([-3.12840684e+02,-1.01279891e+13,-1.42682874e+13,-1.42682874e+13,…

    2022年10月27日
    0
  • ajax跨域解决方案domain_js解决跨域问题

    ajax跨域解决方案domain_js解决跨域问题简介JSON是一种轻量级的数据传输格式,被广泛应用于当前Web应用中。JSON格式数据的编码和解析基本在所有主流语言中都被实现,所以现在大部分前后端分离的架构都以JSON格式进行数据的传输。JavaScript的同源策略:只有协议+主机名+端口号(如存在)相同,则允许相互访问。也就是说JavaScript只能访问和操作自己域下的资源,不能访问和操作其他域下的资源。比如www.aa.com下的…

    2022年8月24日
    4
  • ipv4和ipv6对比(IPV4)

    TCP/IP的心脏是互联网层,这一层主要由IP和ICMP两个协议组成。IP相当于OSI参考模型中的第三层——网络层。而网络层的作用是实现终端节点之间的通信。这种终端节点之间的通信也叫‘点到点’通信。IP地址用于连接在网络中的所有主机中识别出进行通信的目标地址。谷在tcp/ip通信的所有主机中必须设置IP地址。路由控制、多条路由和路由控制表使得数据包可以成功抵达要去的地方。路由控制表记录着此…

    2022年4月15日
    186
  • 连卡佛选用 Orange Business Services 的云平台,以提升其数字化购物体验

    连卡佛选用 Orange Business Services 的云平台,以提升其数字化购物体验

    2022年4月2日
    38
  • virsh命令杂记[通俗易懂]

    virsh命令杂记[通俗易懂]关机virshshutdowndomain开机virshstartdomain查看virsh的snapshot的帮助virshhelpsnapshotSnapshot(helpkeyword‘snapshot’):snapshot-createCreateasnapshotfromXMLsna

    2022年8月11日
    4
  • android中listview分页载入数据

    android中listview分页载入数据

    2021年12月16日
    36

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号