java:多线程(单例设计模式)

本文深入探讨了单例设计模式的实现方法,包括饿汉式和懒汉式两种常见形式,解析了它们在空间和时间上的权衡,以及在多线程环境下的表现差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

* 如何保证类在内存中只有一个对象呢?
    * (1)控制类的创建,不让其他类来创建本类的对象。private
    * (2)在本类中定义一个本类的对象。Singleton s;
    * (3)提供公共的访问方式。  public static Singleton getInstance(){return s} 

package com.heima.thread;

import java.security.SignatureException;

public class Demo1_Singleton {
/*
 * 单例设计模式:一个类在内存中有一个对象
 * 
 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
//		Singleton s1=new Singleton();
/*		Singleton s1=Singleton.s;  //成员变量被私有,不能通过类名.调用
		Singleton.s=null;
		Singleton s2=Singleton.s;
		
		System.out.println(s1==s2);*/
		
		Singleton s1=Singleton.getInstance();
		
		Singleton s2=Singleton.getInstance();
		
		System.out.println(s1==s2);
	}

}
//单列设计模式--饿汉式,推荐使用这种方式
class Singleton{
//	1.私有构造方法,其他类不能访问该构造方法
	private Singleton() {
		
	}
//	2.创建本类对象
	private static Singleton s=new Singleton();
	
//	3.对外提供公共访问get方法
	public static Singleton getInstance() {//获取实例
		return s;
	}
	
}


//单列设计模式--懒汉式,单列的延迟加载模式,多线程的时候会有问题
class Singleton{
//	1.私有构造方法,其他类不能访问该构造方法
	private Singleton() {
		
	}
//	2.声明一个引用
	private static Singleton s;
	
//	3.对外提供公共访问方法
	public static Singleton getInstance() {//获取实例
		if(s==null) {
//			线程1,执行的时候,被抢只能等待,然后线程2,也进来等待,然后线程1执行,创建一个对象,线程2执行,又可以创建一个对象
			s=new Singleton();
		}
		return s;
	}
	
}

/*
 * 饿汉式和懒汉式的区别:
 * 1.饿汉式是空间换时间,懒汉式是时间换空间
 * 2.在多线程访问,饿汉式不会创建对个对象,而懒汉式有可能创建多个对象
 */


class Singleton{
//	1.私有构造方法,其他类不能访问该构造方法
	private Singleton() {
		
	}
//	2.声明一个引用
	public final static Singleton s=new Singleton();////final是最终的意思,被final修饰的变量不可以被更改
	

	
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值