目录
一、饿汉式和懒汉式单例模式(单线程示例)
- 一、饿汉式和懒汉式单例模式(单线程示例)
- 二、懒汉式单例模式(多线程示例)
- 三、懒汉式单例模式(多线程示例,使用同步方法的方式)
- 四、懒汉式单例模式(多线程示例,使用双重检查加锁方式)
- 五、懒汉式单例模式(多线程示例,使用双重检查加锁和volatile关键字结合的方式)推荐使用此方式
1、饿汉式单例模式代码
package com.xz.thread.t4;
/**
* @description: 饿汉式单例模式
* @author: xz
*/
public class HungrySingleton {
//直接声明一个需要被单例的对象,并初始化
private static HungrySingleton singleton=new HungrySingleton();
//私有化构造方法
private HungrySingleton(){}
//对外提供一个静态的获取实例的方法
public static HungrySingleton getInstance(){
return singleton;
}
}
2、懒汉式单例模式代码
package com.xz.thread.t4;
/**
* @description: 懒汉式单例模式
* @author: xz
*/
public class LazySingleton {
//直接声明一个需要被单例的对象,
private static LazySingleton singleton2;
//私有化构造方法
private LazySingleton(){}
public static LazySingleton getInstance(){
if(singleton2 == null ){
singleton2=new LazySingleton();
}
return singleton2;
}
}
3、饿汉式和懒汉式单线程测试类
package com.xz.thread.t4;
/**
* @description:
* @author: xz
*/
public class Main {
public static void main(String[] args) {
HungrySingleton st1= HungrySingleton.getInstance();
HungrySingleton st2= HungrySingleton.getInstance();
HungrySingleton st3= HungrySingleton.getInstance();
System.out.println("饿汉式单例模式=========");
System.out.println(st1);
System.out.println(st2);
System.out.println(st3);
LazySingleton s1= LazySingleton.getInstance();
LazySingleton s2= LazySingleton.getInstance();
LazySingleton s3= LazySingleton.getInstance();
System.out.println("懒汉式单例模式=========");
System.out.println(s1);
System.out.println(s2);
System.out.println(s3);
}
}
4、输出结果 5、结论
- 由第4步输出结果截图可知,在单线程情况下,饿汉式和懒汉式单例模式都是获取的同一对象。
1、懒汉式单例模式代码
package com.xz.thread.t4;
/**
* @description: 懒汉式单例模式
* @author: xz
*/
public class LazySingleton {
//直接声明一个需要被单例的对象,
private static LazySingleton singleton2;
//私有化构造方法
private LazySingleton(){}
public static LazySingleton getInstance(){
if(singleton2 == null ){
singleton2=new LazySingleton();
}
return singleton2;
}
}
2、懒汉式多线程测试类
package com.xz.thread.t4;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* @description:
* @author: xz
*/
public class ThreadMain {
public static void main(String[] args) {
ExecutorService executorService = Executors.newFixedThreadPool(20);
for(int i=0;i
关注
打赏
热门博文
- Netty—— 概念剖析(NIO vs BIO)
- Netty——网络编程 NIO(Selector处理accept事件)代码示例
- CompletableFuture异步编排(多任务组合)
- CompletableFuture异步编排(两任务组合——两个任务必须都完成才触发另一个任务 )
- CompletableFuture异步编排(线程串行化代码示例)
- CompletableFuture异步编排(handle最终处理)
- CompletableFuture异步编排(计算完成回调代码示例)
- hutool工具导出excel代码示例
- CompletableFuture异步编排(开启异步编程代码示例)
- java 获取音频、视频文件时长代码示例