package com.readpdf.demo.single;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* 单例实现得3种方式 :
* 1): 饿汉式
* 2): 懒汉式
* 3): 静态内部类式
*
* @author zly
* @date 2020/10/9 15:52
*/
public class SingleTest {
public SingleTest() {
System.out.println("single class create ...");
}
}
/**
* 饿汉式
*/
class SingleHungry {
public final static SingleTest SINGLE_TEST = new SingleTest();
}
/**
* 懒汉式
*/
class SingleLazy {
private static volatile SingleTest singleTest = null;
public SingleTest getSingleTest() {
if (singleTest == null) {
synchronized (SingleLazy.class) {
if (singleTest == null) {
singleTest = new SingleTest();
}
}
}
return singleTest;
}
}
/**
* 静态内部类方式
*/
class SingleInner {
public static SingleTest getSingleTest() {
return GetSingleTest.singleTest;
}
private static class GetSingleTest {
private static SingleTest singleTest = new SingleTest();
}
}
class Test {
public static void main(String[] args) throws InterruptedException {
ExecutorService executorService = Executors.newFixedThreadPool(10);
System.out.println("饿汉式单例模式开始创建 : ");
for (int i = 0; i < 10; i++) {
executorService.execute(() -> System.out.println(SingleHungry.SINGLE_TEST));
}
Thread.sleep(1000);
System.out.println("懒汉式单例模式开始创建 : ");
for (int i = 0; i < 10; i++) {
executorService.execute(() -> {
System.out.println(new SingleLazy().getSingleTest());
});
}
Thread.sleep(1000);
System.out.println("静态内部类式单例模式开始创建 : ");
for (int i = 0; i < 10; i++) {
executorService.execute(() -> System.out.println(SingleInner.getSingleTest()));
}
executorService.shutdown();
}
}
单例模式3种实现
最新推荐文章于 2024-07-26 23:39:00 发布