java基础知识14- 单例设计模式
2023-09-27 14:22:12 时间
一 单例设计模式
1.1 作用
作用:保证一个类对外只提供一个实例对象。解决在一个类在内存中只存在一个对象。
1.2 好处
好处:节约内存资源,提高性能。
1.3 应用场景
1.widows中的任务管理器;
2.数据库连接池:避免数据库连接或者关闭引起的性能消耗。
3.多线程连接池。
1.4 实现方式
1.私有化一个该类的静态对象
2.定义一个私有的构造函数。
3.提供一个静态的对外访问的方法
1.4.1 饿汉式
实现方式:
publicclass SingleTon1 {
//饿汉式
//1.私有化一个该类的静态对象
privatestatic SingleTon1st=new SingleTon1();
//2.定义一个私有的构造函数
private SingleTon1(){}
//3.提供一个静态的对外访问的方法
public static SingleTon1getInstance(){
returnst;
}
}
1.4.2 懒汉式
方式1:
public class SingleTon2 {
//懒汉式
private static SingleTon2 st=null;
private SingleTon2 (){};
public static synchronized SingleTon2getInstance(){
if(st==null){
st=newSingleTon2();
}
returnst;
}
}
方式2:
//双重锁的判定
public class SingleTon3 {
private static SingleTon3 st=null;
private SingleTon3(){};
public static SingleTon3 getInstance(){
if(st==null){
synchronized(SingleTon3.class){
if(st==null){
st=newSingleTon3();
}
}
}
returnst;
}
}
1.4.3 饿汉式懒汉式和饿汉式的区别
饿汉式:随着类的加载便实例化一个对象,浪费资源,在多线程方面是安全的;
懒汉式:只有调用的时候才实例化一个对象,节省资源,在多线程方面存在不安全,需要加同步锁机制。
1.4.4 静态内部类 实现
public class InnerSingleTon {
private InnerSingleTon(){
}
private static class singleHolder{
private static InnerSingleTon st=new InnerSingleTon();
}
public static InnerSingleTon getInstance(){
return singleHolder.st;
}
}
总结:兼顾了饿汉式和懒汉式的优点和缺点。
http://blog.csdn.net/jason0539/article/details/23297037
相关文章
- Java - 经常使用函数Random函数
- 【软件测试】七款最优秀的Java测试框架
- Java核心技术卷I基础知识1.2.4 健壮性
- Java核心技术卷I基础知识3.3.2 浮点类型
- Java核心技术卷I基础知识3.3.4 Unicode和char类型
- Java核心技术卷I基础知识3.3.5 boolean类型
- Java核心技术卷I基础知识3.4 变量
- Java核心技术卷I基础知识3.4.2 常量
- Java核心技术卷I基础知识3.5.2 数值类型之间的转换
- Java核心技术卷I基础知识3.8.5 多重选择:switch语句
- Java核心技术卷I基础知识3.10.3 数组拷贝
- Java中8个顶级开源NoSQL数据库!
- 第76节:Java中的基础知识
- 第62节:探索Java中的网络编程技术
- 《Java程序员面试秘笈》—— 面试题5 用自己的语言描述Java中的类和对象
- 基于Java+Mysql实现的PC端图书管理系统软件【100010031】
- java 基础知识-数组的7种算法(排序、求和、最值、遍历...)
- DevEco Studio 如何查看Java接口文档(HarmonyOS鸿蒙开发基础知识)
- 浅析security遇到java.lang.IllegalArgumentException:Cannot pass null or empty values to constructor问题处理
- java使用Poi-tl生成word处理特殊符号方框带勾选
- java中的构造块、静态块等说明
- java如何实现python的urllib.quote(str,safe='/')