java 中多线程下的单例模式

本文深入探讨了单例模式的实现方式,包括饿汉式、懒汉式及其同步优化策略,通过代码示例阐述了如何确保内存中仅存在一个对象,并详细解释了懒汉式在多线程环境下的潜在风险及解决方案。

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

 
package namespace;



//单例模式--- 饿汉式
/*
class Person 
{
	private Person p=new Person ();
	private Person () {}
	public  Person GetInstance()
	{
		return p;
	}
}
*/
/*
 *   	下面是懒汉式,只在在单线种的情况下,而这种情况在多线程的情况下会多现在不安全现在,因为如果有两个线程同时访问到new Person ,那么我就生成两个对象,这样就违反了
 *   			单例模式下面一个是在多线
 * */
/*
class Person 
{
	private Person person=null;
	private Person () {}
	public Person getInstance()
	{
		if(person==null)
		{
			person =new Person();
		}
		return person;
	}
	
}*/
class Person 
{
	private Person person=null;
	private Person () {}
	public Person getInstance()
	{
		if(person==null)
		{
			synchronized(this)
			{
				if(person==null)
					person =new Person();
					
			}
		}
		return person ;
	}
}
/*
 * 
 *    这样在synchronized 线程控制块里面进行多线程的控制,就不会再出现多个线程访问时出现多个对象的情况了.
 *    还有一点就是外面的person ==null  判断是用来提高效率的,不然第一次都要对锁进行判断,消耗浓资源
 *    这样可以有次的提高效率
 * */
public class Single {
	public static void main(String args[])
	{
		System.out.println("this is java");
	}
}
/*
 *  		单例模式就是在内存中想只能存在一个对象,而不允许再实例化其他的对象
 * 
 * */

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值