当前位置:   article > 正文

java单例调用_java单例模式

每个java类都调用一个单例类

单例模式

就是始终是一个对象实例.它对外不提供构造函数,因此我们不能够同时产生多个对象.(常用语工具类,数据库连接类等等)

单例模式的调用:因为单例模式的构造方法是私有的,所以在其他类中我们是没有办法直接实例化它的.但是又因为她对外提供了一个获取类实例的方法,所以不论有多少类调用,他对外只可能产生一个类的实例

在People类中;创建静态私有对象p;创建getInstance()方法来返回对象p;其他类可以直接调用getInstance()方法获取对象p。

1.饿汉单例模式:即静态初始化的方式,它是类一加载就实例化对象,所以要提前占用系统资源,因此线程安全

public class People{

private static People p = new People();

private People(){

}

public static People getInstance(){

return p;

}

}

2.懒汉单例模式 : 它使用了延迟加载来保证对象在没有使用之前,是不会进行初始化的。

缺点:线程不安全,当多个线程运行到getInstance()时,有可能会创建多个实例。

public class People{

private static People p;

private People(){

}

public static People getInstance(){

if(p == null){

p = new People();

}

return p;

}

}

3.我们可以直接加上synchronized ,实现线程同步

classSingletion {private static Singletion singletion = null;privateSingletion() {

}public static synchronizedSingletion getSingletion() {if (null ==singletion) {

singletion= newSingletion();

}returnsingletion;

}

}

实现同步会一定程度的使程序的并发度降低,我们可以在对此进行改进。

4.通过双重检查锁来保证程序的高并发和线程安全

1 classSingletion{2 private static Singletion singletion=null;3

4 privateSingletion() {5 }6 public staticSingletion getSingletion(){7 if(null==singletion){8 synchronized (Singletion.class){9 if(null==singletion){10 singletion=newSingletion();11 }12 }13 }14 returnsingletion;15 }16 }

这种写法使得只有在加载新的对象进行同步,在加载完了之后,其他线程在第7行就可以判断跳过锁的的代价直接到第14行代码了。做到很好的并发度。

5.利用枚举实现线程安全并且JVM安全的单例模式

//线程安全,JVM安全的单例类

enumSingleton{

SINGLE

}//单例类的使用

classTest{public static voidmain(String[] args) {

Singleton s1=Singleton.SINGLE;

Singleton s2=Singleton.SINGLE;

Singleton s3=Singleton.SINGLE;

}

}

6.用内部类实现线程安全的单例模式

classSingleton{//02 定义一个静态内部类

private static classInnerClass{static Singleton singleton=newSingleton();

}//03

public staticSingleton getsingleton(){returnInnerClass.singleton;

}//01

privateSingleton(){

System.out.println("call Singleton()");

}

}

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/157624?site
推荐阅读
相关标签
  

闽ICP备14008679号