Java单例模式的实现方法有以下几种
Java单例模式的实现方法有以下几种:
- 懒汉式(LazyInitialization): 在第一次使用时才创建实例。线程不安全版本的懒汉式实现如下:
publicclassSingleton{
privatestaticSingletoninstance;
privateSingleton(){}
publicstaticSingletongetInstance(){
if(instance==null){
instance=newSingleton();
}
returninstance;
}
}
可以通过在getInstance()
方法上加锁synchronized
来实现线程安全的懒汉式单例模式,但是会影响效率:
publicclassSingleton{
privatestaticSingletoninstance;
privateSingleton(){}
publicstaticsynchronizedSingletongetInstance(){
if(instance==null){
instance=newSingleton();
}
returninstance;
}
}
publicclassSingleton{
privatestaticSingletoninstance=newSingleton();
privateSingleton(){}
publicstaticSingletongetInstance(){
returninstance;
}
}
由于在类加载时就创建实例,因此无法实现延迟加载。
publicclassSingleton{
privatevolatilestaticSingletoninstance;
privateSingleton(){}
publicstaticSingletongetInstance(){
if(instance==null){
synchronized(Singleton.class){
if(instance==null){
instance=newSingleton();
}
}
}
returninstance;
}
}
使用volatile
修饰instance
变量可以保证多线程环境下的可见性和有序性。
publicclassSingleton{
privateSingleton(){}
privatestaticclassSingletonHolder{
privatestaticfinalSingletonINSTANCE=newSingleton();
}
publicstaticSingletongetInstance(){
returnSingletonHolder.INSTANCE;
}
}
静态内部类只有在第一次使用时才会被加载,从而实现了延迟加载。
publicenumSingleton{
INSTANCE;
publicvoiddoSomething(){
//dosomething
}
}
版权声明
本文仅代表作者观点,不代表博信信息网立场。
上一篇:史上最全讲解单例模式以及分析源码中的应用 下一篇:linux怎么验证端口可不可用