您当前的位置: 首页 >  Java

小志的博客

暂无认证

  • 0浏览

    0关注

    1217博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

java设计模式——单例模式之静态内部类方式

小志的博客 发布时间:2020-05-22 21:44:45 ,浏览量:0

单例模式的懒汉式基于静态内部类的方式即兼顾了性能又保证了线程安全

一、示例代码:

1、分别定义一个懒汉式基于静态内部类的类、线程类和测试类。

package com.rf.designPatterns.singleton.sttaicInnerClassSingleton;
/**
 * @description: 静态内部类的单例模式
 * @author: xiaozhi
 * @create: 2020-05-22 21:24
 */
public class StaticInnerClassSingleton {
    //私有的构造器,不被外部所访问
    private StaticInnerClassSingleton(){}
    //私有的静态内部类
    private static class InnerClass{
        //new一个私有的静态的StaticInnerClassSingleton对象
        private static StaticInnerClassSingleton staticInnerClassSingleton=new StaticInnerClassSingleton();
    }
    //提供一个公用的对外暴露的方法
    public static StaticInnerClassSingleton getInstance(){
        //返回值为通过静态内部内调用静态成员
        return InnerClass.staticInnerClassSingleton;
    }
}

package com.rf.designPatterns.singleton.sttaicInnerClassSingleton;

/**
 * @description: 多线程类
 * @author: xiaozhi
 * @create: 2020-05-22 21:31
 */
public class MyThread implements Runnable{
    @Override
    public void run() {
        StaticInnerClassSingleton instance = StaticInnerClassSingleton.getInstance();
        System.out.println(Thread.currentThread().getName()+": "+instance);
    }
}

package com.rf.designPatterns.singleton.sttaicInnerClassSingleton;

/**
 * @description: 测试类
 * @author: xiaozhi
 * @create: 2020-05-22 21:32
 */
public class Test {
    public static void main(String[] args) {
        Thread t1 = new Thread(new MyThread());
        Thread t2 = new Thread(new MyThread());
        t1.start();
        t2.start();
        System.out.println("end....");
    }
}

2、分析图如下:

基于静态内部类的方式也也保证了线程的重排序问题

在这里插入图片描述 3、运行结果为,多个线程每次都会生成相同的对象,如下图: 在这里插入图片描述

关注
打赏
1661269038
查看更多评论
立即登录/注册

微信扫码登录

0.0392s