【多线程】单例模式与多线程

本文探讨了单例模式在多线程环境下的实现,包括饿汉式和懒汉式。饿汉式天生线程安全,而懒汉式则需要通过同步机制如`synchronized`关键字或双重检查锁定来确保线程安全。此外,文章还介绍了使用静态内置类和静态代码块实现单例模式的方法。
摘要由CSDN通过智能技术生成

一、前言

       如何使单例模式遇到多线程是安全的、正确的?

       我们在学习设计模式的时候知道单例模式有懒汉式和饿汉式之分。简单来说,饿汉式就是在使用类的时候已经将对象创建完毕,懒汉式就是在真正调用的时候进行实例化操作。

二、饿汉式+多线程

      

public class MyObject {
    //饿汉模式
	
	private static MyObject myObject=new MyObject();
	private MyObject(){
		
	}
	public static MyObject getInstance(){
		return myObject;
	}
}

     自定义线程类:

 

     

public class MyThread extends Thread {
	@Override
	public void run(){
		System.out.println(MyObject.getInstance().hashCode());
	}
}

     运行类:

 

     

public class Run {

	public static void main(String[] args) {
		MyThread t1=new MyThread();
		MyThread t2=new MyThread();
		MyThread t3=new MyThread();
		t1.start();
		t2.start();
		t3.start();

	}

}

    程序运行后的结果如下所示:

 

   

    hashCode是同一个值,说明对象是同一个。也就是说饿汉式单例模式在多线程环境下是线程安全的。

三、懒汉式+多线程

      

public class MyObject {
	private static MyObject myObject;
	/*私有构造函数避免被实例化*/
	private MyObject(){
		
	}
	public static MyObject getInstance(){
		try {
			if (myObject==null)
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值