zoukankan      html  css  js  c++  java
  • 单例对象

    饿汉式:不支持延迟加载

    private static OneSingle oneSingle = new OneSingle();
    public static OneSingle getInstance(){
        return oneSingle;
    }

    懒汉式:

    getInstance方法必须添加 同步关键字,运行效率比较慢,支持懒加载。
    同步关键字:防止多线程初始多个对象。
    
    
    public class TwoSingle {
    private static TwoSingle twoSingle = null;

    public static synchronized TwoSingle getInstance() {
    if(null == twoSingle){
    System.out.println("初始对象!");
    twoSingle = new TwoSingle();
    }
    return twoSingle;
    }

    public static void main(String[] args){
    /**
    TwoSingle twoSingle = TwoSingle.getInstance();
    TwoSingle twoSingle2 = TwoSingle.getInstance();
    System.out.println(twoSingle == twoSingle2);
    */
    for(int i=0,len=150;i<len;i++){
    Thread thread = new Thread(new Runnable() {
    @Override
    public void run() {
    TwoSingle.getInstance();
    }
    });
    thread.start();
    }
    }
    }
    
    

    3、双重锁判断机制(DCL模式 Double Check Lock)

    volatile:在多核系统中,对应L1,L2级的高速缓存,当对象被修改时,其他CPU的高速缓存,可以见其修改的值。
        private static volatile ThreeSingle threeSingle=null;
    
    
        public static ThreeSingle getInstance(){
    
            if(threeSingle==null){
                synchronized (ThreeSingle.class){
                    System.out.println(Thread.currentThread().getId()+",,,"+System.currentTimeMillis()+" init object!");
                    threeSingle = new ThreeSingle();
                }
            }
            return threeSingle;
        }
    
        public static void main(String[] args){
    
            for(int i=0,len=1500;i<len;i++){
                Thread thread = new Thread(new Runnable() {
                    @Override
                    public void run() {
                        ThreeSingle.getInstance();
                    }
                });
                thread.start();
            }
        }

    4、内部类

    private  FourSingle(){}
    
        private static class SingleClass {
            private static final FourSingle fourSingle = new FourSingle();
        }
    
        public static FourSingle getInstance(){
            return SingleClass.fourSingle;
        }
    
    
        public static void main(String[] args){
    
            for(int i=0,len=150;i<len;i++){
                Thread thread = new Thread(new Runnable() {
                    public void run() {
                        System.out.println(FourSingle.getInstance().hashCode());
                    }
                });
                thread.start();
            }
        }
  • 相关阅读:
    ASP.NET Core 介绍和项目解读
    C#性能优化总结
    C# 线程知识--使用Task执行异步操作
    异步编程 In .NET(转载)
    .NET实现WebSocket服务端即时通信实例
    .net core 学习笔记一 Program与Startup
    .net core 自定义中间件
    c# 通过json.net中的JsonConverter进行自定义序列化与反序列化
    c# 通过HttpListener创建HTTP服务
    c# 反射实现模型深拷贝
  • 原文地址:https://www.cnblogs.com/liuwd/p/10833339.html
Copyright © 2011-2022 走看看