Java中6种单例模式写法代码实例
单例模式
某个类任何情况下只有一个实例,并提供一个全局访问点来获取该实例。
Java6种单例模式:2种懒汉式,2种饿汉式 ,静态内部类 ,枚举类
懒汉式
synchronized+延迟加载
public class Singleton {
private static Singleton instance;
private Singleton(){}
public static synchronized Singleton getInstance(){ //synchronized锁住getInstance方法
if (instance==null) { //延迟加载
instance = new Singleton();
}
return instance;
}
}
volatile+synchronized双检锁
public class Singleton {
private volatile static Singleton instance; //volatile修饰实例
private Singleton(){}
public static Singleton getInstance(){
if (instance==null) {
synchronized(Singleton.class){ //synchronized锁住Singleton对象
if (instance==null) {
instance = new Singleton();
}
}
}
return instance;
}
}饿汉式
类加载时触发实例化,避免了多线程同步问题 类加载时初始化静态实例
public class Singleton {
private static Singleton instance = new Singleton(); //类加载时初始化静态实例
private Singleton() {
}
public static Singleton getInstance() {
return instance; //直接返回加载好的静态实例
}
}在静态代码块里初始化实例
public class Singleton {
private static Singleton instance = null;
static{
instance = new Singleton(); //在静态代码块里初始化实例
}
private Singleton() {
}
public static Singleton getInstance() {
return instance;
}
}
静态内部类方式
实现了延迟加载
调用静态内部类时,在静态内部类里初始化实例
public class Singleton {
//定义静态内部类
private static class InnerSingleton {
private static final Singleton INSTANCE = new Singleton(); //初始化完成Singleton类静态实例
}
private Singleton() {
}
public static Singleton getInstance() {
return InnerSingleton.INSTANCE; //返回静态内部类里的静态实例
}
}枚举类方式
既能避免多线程同步问题,又能防止反序列化重新创建对象
创建一个枚举,枚举成员为INSTANCE。使用枚举类.INSTANCE即可获取实例
package acc;
public enum Singleton {
INSTANCE; //定义1个唯一的成员INSTANCE
//枚举类里的公共方法
public void doSomething() {
System.out.println("r2323t23");
}
}
public class TestSingleton {
public static void main(String[] args) {
//使用枚举类.INSTANCE即可获取实例
Singleton.INSTANCE.doSomething();
}
}到此这篇关于Java中6种单例模式写法代码实例的文章就介绍到这了,更多相关Java单例模式写法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
springboot结合mybatis-plus快速生成项目模板的方法
Mybatis-Plus是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生,接下来通过本文给大家分享springboot结合mybatis-plus快速生成项目模板的方法,感兴趣的朋友一起看看吧2021-06-06
java 定时器Timer和TimerTask的使用详解(执行和暂停)
这篇文章主要介绍了java 定时器Timer和TimerTask的使用详解(执行和暂停),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧2023-11-11
使用Cloud Studio构建SpringSecurity权限框架(腾讯云 Cloud Studio 实战训练
随着云计算技术的成熟和普及,传统编程能力和资源以云服务的形式开放出来,从中间件、数据库等水平能力服务组件到人脸识别、鉴权服务等基本业务服务组件很容易的在云端获取,本文介绍使用Cloud Studio构建SpringSecurity权限框架的相关知识,感兴趣的朋友一起看看吧2023-08-08
SpringBoot使用jasypt实现数据库信息脱敏的方法详解
这篇文章主要介绍了SpringBoot使用jasypt实现数据库信息的脱敏,以此来保护数据库的用户名username和密码password(容易上手,详细),文中有详细的图文讲解和代码示例供大家参考,需要的朋友可以参考下2024-06-06
FactoryBean BeanFactory方法使用示例详解讲解
这篇文章主要为大家介绍了FactoryBean BeanFactory方法使用示例详解讲解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2022-12-12


最新评论