• JAVA 设计模式 单利 懒汉式进阶版


    1. package com.data.entity;
    2. public class ClassA { //单利 懒汉式进阶版
    3. /*
    4. private: 保证外界无法直接访问该属性
    5. static: 1.保证newC1assA方法可以访问
    6. 2.使属性成为静态属性,内存中只会存在一份,如此就能保证实例化操作只会执行一次
    7. */
    8. private static ClassA ca = null;
    9. private static class Inner{
    10. public static ClassA get(){
    11. //判断是否可能出现线程安全问题 ,以此决定是否需要加锁
    12. //二次校验:尽可能减少加锁的时机
    13. if(ca==null) {
    14. //同步代码块:防止线程安全问题,临界资源对象:当前类的类对象
    15. synchronized (ClassA.class) {
    16. if (ca == null) { //空值判断:确定是第一次获取实例
    17. ca = new ClassA();
    18. }
    19. }
    20. }
    21. return ca;
    22. }
    23. }
    24. /**供外界调用获取该类的唯一实例
    25. static: 方便外界通过类名直接调用该方法
    26. //*@return 当前类的唯一实例对象*/
    27. public static ClassA newClassA(){
    28. //判断是否可能出现线程安全问题 ,以此决定是否需要加锁
    29. //二次校验:尽可能减少加锁的时机
    30. return Inner.get();
    31. }
    32. //构造私有化: 防止外界通过调用构造创建不同对象
    33. private ClassA(){
    34. }
    35. }
    1. import com.data.entity.ClassA;
    2. import com.data.entity.MyList;
    3. import java.lang.reflect.Constructor;
    4. public class text8 {
    5. public static void main(String[] args)throws Exception {
    6. ClassA c1= ClassA.newClassA();
    7. ClassA c2= ClassA.newClassA();
    8. System.out.println(c1);
    9. System.out.println(c2);
    10. Thread S1=new Thread(()->{
    11. ClassA cb1 = ClassA.newClassA();
    12. System.out.println("t1>> "+cb1);
    13. });
    14. Thread S2=new Thread(()->{
    15. ClassA cb1 = ClassA.newClassA();
    16. System.out.println("t2>> "+cb1);
    17. });
    18. S1.start();
    19. S2.start();
    20. }
    21. }

  • 相关阅读:
    Day14——二叉树的前中后序遍历(迭代&&递归)
    使用mockMvc测试请求
    金仓数据库 KingbaseES 插件参考手册 U
    SpringCloud——Sleuth(链路追踪、admin)
    SARscape——保边滤波
    性能自动化测试
    Linux-c inotify监控目录和文件使用
    Linux查看文件的命令 file head tail cat more less
    Mysql replace into
    C程序的编译过程及生成文件详解
  • 原文地址:https://blog.csdn.net/webxscan/article/details/134444079