public class hugryman
私有构造
private hugryman()
私有静态只读实例化
private static readonly hugryman _hugryman=new hugryman();
公有静态读取方法
public static hugryman()
return _hungryman
多次获取的是同一个实例
gethashcode发现是同一个对象
数值一样
缺点
一开始就实例化 浪费性能
改懒汉式
layman
私有构造
私有静态字段
private static _layman
公有静态读取同时实例化
在getlazyman里面实例化
null的时候创建 防止多次实例化
(都要静态)
缺点
会重复创建
如果多个程序同时进入,会实例化多次
重复实例化的缺点
改进方法:
var obj=new object()
lock(obj)
{
}
花括号的内容只允许一个线程进行
例子
private static layman _layman
public static layman getlazyman()
lock(o){
if (_layman==NULL)
{_lazyman=new lazyman()}
}
return _layman
lock实际上是
monitor.enter()
monitor.exit()
防止指针重排的方法
volatile
饿汉式的改造方法
静态内部类
hugrymanstatic
private hungrymanstatic()
private static class innerclass()
{
var _hungrymanstatic=new hungrymanstatic()
}
public static Gethungrymanstatic()
{
return _hungrymanstatuc
}
静态内部类 只在类加载的时候创建一次实例
不会浪费资源