辛格尔顿

辛格尔顿

大家好,又见面了,我是全栈君,今天给大家准备了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

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 叙事传输的说服机制_简述传输层实现可靠传输措施

    叙事传输的说服机制_简述传输层实现可靠传输措施博文《PUSCH上行跳频(1)-Type1频率跳频》里提到了为什么要使用PUSCH跳频,以及详细介绍了Type1方式的跳频,本文继续这个话题,介绍Type2方式的跳频。1.采用PUSCH跳频时需要注意的问题在上行子帧中,PUCCH信道处于带宽的高低两侧,或者说位于频带的边缘,PUSCH信道则位于带宽的中间。PUCCH信道也以RB对为基本单位,每个RB在频域上是12个子载波,时域上是1个时隙。需要注意PUCCH信道每个RB对的两个RB位置:第一个时隙的PUCCH信道位于带宽的低频位置,第二个时隙的

  • 剑指offer——二进制中1的个数(解释n & 0xFFFFFFFF)[通俗易懂]

    剑指offer——二进制中1的个数(解释n & 0xFFFFFFFF)[通俗易懂]题目描述:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。解答如下:环境:python2.7.3正数的原码反码补码都一样负数的补码是其对应正数的反码加1这里需要弄清楚为什么python中负数需要和0xFFFFFFFF做与操作?在计算机中,所有的数字都是使用补码存储起来的。由于Python没有位数这个概念,所以得到二进制表示需要多一点操作,即将位数限制在32位,…

  • Socket 非阻塞模式下connect 返回EINPROGRESS(115)错误[通俗易懂]

    Socket 非阻塞模式下connect 返回EINPROGRESS(115)错误[通俗易懂]今天再测试socket的时候,发现一个很奇怪的问题,就是客户端再connect的时候第一次connect总是会返回-1,errno是115,往往第二次连接就可以成功了。但是对于服务端来说,第一次连接已经成功返回了。后来想想可能跟自己的设置socket是非阻塞的有关系,后来吧socket设置成阻塞的,问题确实就没有了。后来有反复尝试了非阻塞的。我先把服务器关闭,让客户端连接,可以发现从打出来的e…

  • ssl协议及开源实现openssl

    ssl协议及开源实现opensslssl协议SSL:(SecureSocketLayer)安全套接层,ssl是一套安全协议,被应用层调用,当http调用ssl协议时被称为https,当ftp调用ssl协议时被称为sftp。lls是一个协议的集合,其中包括:Handshake协议:包括协商安全参数和密码套件、服务器身份认证(客户端身份认证可选)、密钥交换ChangeCipherSpec协议:一条消息表明握手协议已

  • python归一化函数_机器学习-归一化方法

    python归一化函数_机器学习-归一化方法1.归一化(Normalization)引入归一化,是由于在不同评价指标(特征指标)中,其量纲或是量纲单位往往不同,变化区间处于不同的数量级,若不进行归一化,可能导致某些指标被忽视,影响到数据分析的结果。为了消除特征数据之间的量纲影响,需要进行归一化处理,以解决特征指标之间的可比性。原始数据经过归一化处理后,各指标处于同一数量级,以便进行综合对比评价。1.必要性举例:以房价问题为例,假设我们…

    2022年10月11日
  • Java中的substring截取字符串方法「建议收藏」

    Java中的substring截取字符串方法「建议收藏」1.在处理字符串的过程中有很多情况下会遇到需要截取字符串的情况,这个时候使用Java中提供的substring方法来截取就非常方便了2.其中比较经常使用到的方法有两个:①publicStringsubstring(intbeginIndex)这个方法截取的字符串是从索引beginIndex开始的,到整个字符串的末尾,例如:字符串Strings=”abcdef”;调…

发表回复

您的电子邮箱地址不会被公开。

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