• 单例和多线程


     要保证在多线程环境下的单例模式,有下面两种建议的方式:

    一、静态内部类

    public class Singletion {
        
        private static class InnerSingletion {
            private static Singletion single = new Singletion();
        }
        
        public static Singletion getInstance(){
            return InnerSingletion.single;
        }
        
    }

     二、double check的方式

    public class DubbleSingleton {
    
        private static DubbleSingleton ds;
        
        public  static DubbleSingleton getDs(){
            if(ds == null){
                try {
                    //模拟初始化对象的准备时间...
                    Thread.sleep(3000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                synchronized (DubbleSingleton.class) {
                    if(ds == null){
                        ds = new DubbleSingleton();
                    }
                }
            }
            return ds;
        }
        
        public static void main(String[] args) {
            Thread t1 = new Thread(new Runnable() {
                @Override
                public void run() {
                    System.out.println(DubbleSingleton.getDs().hashCode());
                }
            },"t1");
            Thread t2 = new Thread(new Runnable() {
                @Override
                public void run() {
                    System.out.println(DubbleSingleton.getDs().hashCode());
                }
            },"t2");
            Thread t3 = new Thread(new Runnable() {
                @Override
                public void run() {
                    System.out.println(DubbleSingleton.getDs().hashCode());
                }
            },"t3");
            
            t1.start();
            t2.start();
            t3.start();
        }
        
    }
  • 相关阅读:
    Dockerfile
    走进Docker
    liunx 设置定时任务
    《程序员自我修养》读书笔记
    Ubuntu换源
    liunx安装python2.7.12
    预习非数值数据的编码方式
    预习原码补码
    第三章预习
    预习非数值数据的编码方式
  • 原文地址:https://www.cnblogs.com/dongdone/p/5727402.html
Copyright © 2020-2023  润新知