using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _1.创建者模式_单例模式
{ //改为public,代表全局访问类
public class Singleton2
{
//饿汉模式
//饿汉模式,很饿很着急,所以类加载时即创建实例对象
//好处:简单明了,无需关注线程安全问题。
//缺点:如果在一个大环境下使用了过多的饿汉单例,则会生产出过多的实例对象,略微占内存
//
private static Singleton2 singleton = new Singleton2();
private Singleton2() { }
//对外公共接口
public static Singleton2 getInstance()
{
return singleton;
}
}
class Program
{
static void Main(string[] args)
{
Singleton2 s1 = Singleton2.getInstance();//调用单例的方法
}
}
//单线程懒汉。
///饱不着急,延迟加载,啥时候用啥时候创建实例,存在线程安全问题
不是线程安全的,因为是在需要的时候才会产生实例对象,生产之前会判断对象引用是否为空
如果多个线程同时进入判断,就会生成多个实例对象,这是不符合单例的思想的
饱汉模式为了保证线程安全,就用synchronized关键字标识了方法
好处:延时加载,用的时候才会生产对象。
缺点:需要保证同步,付出效率的代价。
//public class Singleton2
//{
// private static Singleton2 singleton=null;
// private Singleton2() { }
// public static Singleton2 getInstance()//synchronized
// {
在第一次调用方法时,实例化;在类刚加载时不创建实例化
只适用单线程,当多线程调用时,需要加锁
// if (singleton == null)
// singleton = new Singleton2();
// return singleton;
// }
//}
}
04-27
647
08-03
189