辛格尔顿

辛格尔顿

大家好,又见面了,我是全栈君,今天给大家准备了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)
上一篇 2022年1月1日 下午5:00
下一篇 2022年1月1日 下午6:00


相关推荐

  • 实操!我「手搓」了一场1.4万人看过的AI人机辩论赛(内附教程)

    实操!我「手搓」了一场1.4万人看过的AI人机辩论赛(内附教程)

    2026年3月12日
    3
  • TDSCDMA SIB content[通俗易懂]

    TDSCDMA SIB content[通俗易懂]SIB1:包括NAS系统信息,UE在空闲态和连接态下所使用的定时器和常数信息。 SIB2:URAID信息。 SIB3:小区选择和重选的参数,包括Cellidentity、Cellselectionandre-selectioninfo和CellAccessRestriction三个信息IE。下面对这些IE的内容进行深入剖析。   

    2022年10月4日
    4
  • Java冒泡排序实现

    Java冒泡排序实现Java冒泡排序原理:依次比较相邻的两个书,将较大的数放右边思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复第一趟步骤,直至全部排序完成。冒泡排序的优点:每进行一趟排序,就会少比较一次,因为每进行一趟排序都会找出一个较大值。代码演示:…

    2022年7月8日
    23
  • 数据库中varchar类型 最大长度是多少?[通俗易懂]

    数据库中varchar类型 最大长度是多少?[通俗易懂]一.varchar存储规则:4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节)5.0版本以上,varchar(20),指的是20字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放20个,最大大小是65532字节Mysql4中最大也不过是20个字节,但是Mysql5根据编码不同,存储大小也不同。…

    2022年4月19日
    1.3K
  • css里的clear_css取消某个样式

    css里的clear_css取消某个样式clear:both清除两边,没有用的clear:left清除左边,没有用的clear:right清除右边,没用的

    2025年10月29日
    3
  • 人工智能将会改变IT服务管理的三种方式

    人工智能将会改变IT服务管理的三种方式

    2022年3月11日
    41

发表回复

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

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