Java中Singleton单例设计模式以及单例设计模式的证明

什么是Singleton?

Singleton:在Java中既指单例设计模式,它是软件开发中常用的设计模式之一。

需求:要求当前程序只能有一个实例对象被获取或使用的代码模式。

实现:

  • 一是某个类只能有一个实例;     ♥ 私有构造器:不允许外界实例化
  • 二是必须自行创建这个实例;     ♥ 私有静态属性:给公有静态方法提供一个内部实例对象
  • 三是必须自行向整个系统提供这个实例;   ♥ 公有静态方法:可以在外界通过类名调用该方法,并且获得一个实例;   获取该例对象的方法(1)直接暴露    (2)用静态变量的get方法获取

几种常见的方式:

  • 饿汉式:直接创建对象,多线程下,饿汉式线程安全,不用去考虑

         直接实例化饿汉式(简洁直观)

         枚举式(最简洁)

         静态代码块饿汉式(适合复杂实例化)

  • 懒汉式:延迟创建对象。多线程下,懒汉式线程不安全;(添加同步锁实现同步-线程安全)

​​​​​​​直接实例,简单的demo,例如:

import java.util.HashSet;
import java.util.Set;

public class Singleton {
	
	static Set<SingleTon1> set1 = new HashSet<SingleTon1>();
	static Set<SingleTon2> set2 = new HashSet<SingleTon2>();
	
	static Runnable r1=new Runnable() {
		
		@Override
		public void run() {
			SingleTon1 dl=SingleTon1.getSingleTon1();
			set1.add(dl);
		}
	};
	

	static Runnable r2=new Runnable() {
		@Override
		public void run() {
			SingleTon2 dl2=SingleTon2.getSingleTon2();
			set2.add(dl2);
		}
	};
	
	
	public static void main(String[] args) {
		for(int i=1;i<=10;i++) { 
			Thread t = new Thread(r2);
			t.start();
		}
		try {
			Thread.sleep(5000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		System.out.println(set2.size());
	}
}


//饿汉式
class SingleTon1{
	//私有构造器,防止外界直接实例
	private SingleTon1() {}
	
	//公有静态方法,
	public static SingleTon1 getSingleTon1() {
		return st1;
	}
	
	//私有静态属性;
	private static SingleTon1 st1=new SingleTon1();
}


//懒汉式
class SingleTon2{
	//私有构造器,防止外界直接实例
	private SingleTon2() {}
	
	//公有静态方法,
	public static synchronized SingleTon2 getSingleTon2() {
		if(st2==null) {
			try {
				Thread.sleep(2000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			st2=new SingleTon2();
		}
		return st2;
	}
	
	//私有静态属性;
	private static SingleTon2 st2;
}

单例设计模式的证明

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值