• Java多线程中的单例模式


    一、在多线程环境下创建单例

    方式一:

    package com.ietree.multithread.sync;
    
    public class Singletion {
        
        private static class InnerSingletion {
            private static Singletion single = new Singletion();
        }
    
        public static Singletion getInstance() {
            return InnerSingletion.single;
        }
    }

    方式二:

    package com.ietree.multithread.sync;
    
    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();
        }
    }
  • 相关阅读:
    闭包函数 (字符编码,文件处理,函数基础总结)
    函数参数详解
    文件处理及函数基础
    文件处理高级
    面向对象----反射
    正则表达式与re模块
    常用模块
    模块和包
    内置函数与匿名函数
    HDU
  • 原文地址:https://www.cnblogs.com/Dylansuns/p/6719764.html
Copyright © 2020-2023  润新知