zoukankan      html  css  js  c++  java
  • 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();
        }
    }
  • 相关阅读:
    [转] Java中的static关键字解析
    [转] Java中public,private,final,static等概念的解读
    [转] Java关键字final、static使用总结
    Android Studio代码调试大全
    [转] Java接口_interface_implements
    中介者模式
    责任链模式
    命令模式
    桥接模式
    单例模式
  • 原文地址:https://www.cnblogs.com/Dylansuns/p/6719764.html
Copyright © 2011-2022 走看看