您的位置:首页 > 其它

懒汉式和饿汉式

2018-03-24 14:55 106 查看
饿汉式
public class LazySingle {
//因为不想被创建对象,所以必须构造方法私有化,如果不写也会有默认的构造方法,所以必须写私有的
private LazySingle() {
}

//延时创建
private static LazySingle ls = null;

//加锁是为了保证线程的安全防止创建多个对象
public static LazySingle getLazySingle() {
if (ls == null) {
ls = new LazySingle();
}
return ls;
}
}
懒汉式
方式一:不加锁的,所以线程不安全

public class HungrySingle {
private static final HungrySingle hs = new HungrySingle();
//因为不想被创建对象,所以必须构造方法私有化,如果不写也会有默认的构造方法,所以必须写私有的
private HungrySingle(){}
public static HungrySingle getHs() {
return hs;
}
}
方式二:加锁,保证线程安全public class LazySingle {
//因为不想被创建对象,所以必须构造方法私有化,如果不写也会有默认的构造方法,所以必须写私有的
private LazySingle() {
}
//延时创建
private static LazySingle ls = null;
//加锁是为了保证线程的安全防止创建多个对象
     public static LazySingle getLazySingle() {
if (ls == null) {
synchronized (LazySingle.class) {
if (ls == null) {
ls = new LazySingle();
}
}
}
return ls;
}
}
方法二中,我们能够看出锁也可以加在public static LazySingle getLazySingle() {}中,但是如果加在方法中那么每次调用都会判断锁的归属权,尤其在循环中,很影响效率,所以要加在第二个if外面。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  设计模式