zoukankan      html  css  js  c++  java
  • Java基础--单例类创建和测试

    单例模式的主要作用是保证在Java程序中,某个类只有一个实例存在。单例模式有很多好处,它能够避免实例对象的重复创建,不仅可以减少每次创建对象的时间开销,还可以节约内存空间;能够避免由于操作多个实例导致的逻辑错误。

    如果一个对象有可能贯穿整个应用程序,而且起到了全局统一管理控制的作用,那么单例模式也许是一个值得考虑的选择。一些管理器和控制器常被设计成单例模式。

    实现1-普通

    public class SingletonClass {
        
        private static final SingletonClass INSTANCE = new SingletonClass();
    
        private SingletonClass() {
        }
        
        public static SingletonClass getInstance()
        {
            return INSTANCE;
        }
    
    }

    ---借助AccessibleObject.setAccessible方法,通过反射机制调用私有构造器会破坏Singleton

    实现2-枚举

    public enum EnumSingleton {
        
        INSTANCE;
    
        public String other() {
            return "other";
        }
    
    }

    ---利用枚举的特性

    实现3-静态内部类

    public class Singleton {
    
        private static class SingletonHolder {    
           private static final Singleton INSTANCE = new Singleton();    
         }
    
         private Singleton (){ }   
     
         public static final Singleton getInstance() {    
            return SingletonHolder.INSTANCE;    
         } 
    }

    ---

    单例测试类: 

    class SingletonTest implements Runnable {
    
        private static CountDownLatch latch = new CountDownLatch(1);
    
        static Set<String> set = new ConcurrentSkipListSet<String>();
    
        @Override
        public void run() {
            try {
                latch.await();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
    
            set.add(SingletonClass2.getInstance().toString());
        }
    
        public static void main(String[] args) throws Exception {
    
            for (int k = 0; k < 2000; k++) {
                SingletonTest tt = new SingletonTest();
                Thread t = new Thread(tt);
                t.start();
            }
    
            //释放锁
            latch.countDown();
    
            Thread.sleep(2000);
    
            System.out.println(set.size());
        }
    }

    ---

    end

  • 相关阅读:
    python笔记-2
    python笔记-1
    生成列表
    内置函数
    装饰器、包的导入
    python3 编码
    python3 初识函数
    python3 文件读写
    python3 流程控制
    python3 数据类型
  • 原文地址:https://www.cnblogs.com/luangeng/p/5837719.html
Copyright © 2011-2022 走看看