夜话JAVA设计模式之单例模式(单件模式Singleton)
2024-08-30 23:26:31
单例模式也叫单件模式,就是确保一个类只有一个实例,并提供一个全局访问点。
设计成单例即把某个类设计成我们自己管理的单独实例,避免实例对象的重复创建,我们只有通过单例类的全局访问点获取实例。
下面来看金典的几种单例模式java代码实现:
1、饿汉模式
/**
* 饿汉模式(创建和运行负担小,占用内存小时使用)
* @author monkjavaer
* @date 2018/08/27 21:44
*/
public class Singleton1 { private static Singleton1 instance = new Singleton1();
private Singleton1(){}
public static Singleton1 getInstance(){
return instance;
} }
2、懒汉模式
/**
* 懒汉模式
* (懒汉模式并没有考虑线程安全问题,
* 在多个线程可能会并发调用它的getInstance()方法,
* 导致创建多个实例.)
* @author monkjavaer
* @date 2018/08/27 22:14
*/
public class Singleton2 {
private static Singleton2 instance ;
private Singleton2(){}
public static Singleton2 getInstance(){
if (instance ==null) {
instance = new Singleton2();
}
return instance;
}
}
3、懒汉模式处理多线程
/**
*
* 懒汉模式(处理多线程)synchronized同步会降低性能。
* @author monkjavaer
* @date 2018/08/27 22:21
*/
public class Singleton3 {
private static Singleton3 instance ;
private Singleton3(){}
public static synchronized Singleton3 getInstance(){
if (instance == null){
instance = new Singleton3();
}
return instance;
}
}
4、用“双重检查加锁”,在getIntance()中减少使用同步
/**
* 用“双重检查加锁”,在getIntance()中减少使用同步
* 利用双重检查加锁,首先检查是否实例已经创建,如果没有才同步。
* 这样只有第一次才会同步。
* @author monkjavaer
* @date 2018/08/27 22:28
*/
public class Singleton4 {
private volatile static Singleton4 instance; private Singleton4(){} public static Singleton4 getInstance(){
//如果实例不存在,进入同步区
if (instance == null){
//只有第一次才执行
synchronized (Singleton4.class){
//进入区块再检查一次
if (instance == null){
instance = new Singleton4();
}
}
}
return instance;
} }
最新文章
- druid配置数据库连接使用密文密码
- iOS隐私政策
- iOS初步开发
- 【代码笔记】iOS-16进制颜色与UIColor互转
- Linux如何学习
- js鼠标拖拽
- SPOJ 1739 Yet Another Equation(Pell方程)
- 网站繁简切换的JS遇到的一个BUG
- Making your local server accessible from anywhere
- linux 环境下java环境配置
- oracle 初探内存结构
- oracle 快照(snapshot) 管理
- JVM内存分配与回收策略
- LAMP分离搭建WordPress
- 【转】java提高篇之理解java的三大特性——多态
- sencha touch list ListPaging使用详解
- Web Api 的 路由机制
- POJ 1159 Palindrome(最长公共子序列)
- 使用位图文本工具BMFont从图片生成自定义字体
- Eclipse中用两个控制台测试网络通信程序
热门文章
- Q - Euclid in Manhattan(欧几里德距离==曼哈顿距离?)
- 为WebSphere Application Server v8.5安装并配置JDK7
- [译]Cookies Without Chocolate Chips
- 支持多种格式的播放器js代码
- LN : Eden Bitset_3
- iOS显示一张图片 Objective-C
- php经典bug
- 北大ACM(POJ1018-Communication System)
- Anniversary Cake
- Exception Information