辛格尔顿

辛格尔顿

大家好,又见面了,我是全栈君,今天给大家准备了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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【AVD】简述某些视频在线播放时卡顿、本地播放时不卡顿的问题

    【AVD】简述某些视频在线播放时卡顿、本地播放时不卡顿的问题曾经在业务中遇到过这样的问题,我们编码出来的视频在Android、iOS端,使用ijkplayer内核的播放器播放时卡顿,甚至无法任意定位播放位置,将导致卡顿无法播放。今天,又有同事遇到类似的问题,而我发现,我只写过一个《用notepad++和Excel协助分析媒体文件包》,而并没有把当时遇到的问题分析记录下来。于是,在此简单说明一下。视频文件结构教科书般的教程、课程中对视频文件结构的描述非常详细,此处不赘述,简单地说,视频文件也是一种文件,是文件,就是一堆二进制数的集合,而且是一个.

    2022年9月15日
    2
  • navicat最新激活码[在线序列号]

    navicat最新激活码[在线序列号],https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月19日
    57
  • Git 指令集

    Git 指令集Git指令集Git是分散式的版本控制系統,從架設、簡易操作、設定,此篇主要是整理基本操作、遠端操作等.註:Git的範圍太廣了,把這篇當作是初學入門就好了.注意事項由project/.git/config可知:(若有更多,亦可由此得知)origin(remote)是Repository的版本master(branch)是

    2022年5月30日
    31
  • 【视频教程】JEECG 入门视频教程大全+历史版本号代码下载[通俗易懂]

    【视频教程】JEECG 入门视频教程大全+历史版本号代码下载

    2022年1月27日
    41
  • Vue电商后台管理系统功能展示

    Vue电商后台管理系统功能展示项目技术:html、css、javascript、node.js、vue、mysql项目描述:电商后台管理系统,主要功能包括:用户账号管理、商品分类、商品信息、订单、数据统计等业务功能。采用前后端分离的开发模式,其中前端项目是基于Vue技术栈的SPA项目,通过API接口连接服务器,访问mysql数据库。成品效果展示:一、登陆界面二、登陆校验规则三、登陆成功后,保存Token四、用户管理页面五、添加用户功能(采用正则表达式进行校验)六、添加用户成功,弹出消息框.

    2022年5月5日
    53
  • 关闭对话框,OnClose和OnCancel

    关闭对话框,OnClose和OnCancel

    2021年12月4日
    48

发表回复

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

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