栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

多线程下的单例模式

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

多线程下的单例模式

多线程下的单例模式 一、多线程下如何实现单例模式
  1. 使用DCL双检查锁机制(注意要使用volatile强制从公共内存中存取,不然多线程并发时可能会在线程的工作空间中读出)
  2. 使用使用静态内置类方式
  3. 利用静态代码块在使用类时执行的特性来实现多线程下的单例模式

代码:

package com.chapter06;


class MyObject01 {
    // 加上volatile 强制从公用内存中读取,如果不适用volatile则有可能从线程的工作内存中读取
    private static volatile MyObject01 myObject = null;

    public MyObject01() {
    }

    public static MyObject01 getMyObject() {
        if (myObject == null) {
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            synchronized (MyObject01.class) {
                if (myObject == null) {
                    myObject = new MyObject01();
                }
            }
        }
        return myObject;
    }
}


class MyObject01_1 {
    private static class MyObject01_1Handler {
        private static MyObject01_1 myObject01_1 = new MyObject01_1();
    }

    public MyObject01_1() {
    }

    public static MyObject01_1 getMyObjectInstance() {
        return MyObject01_1Handler.myObject01_1;
    }
}

public class StudyThreads01多线程下的单例模式 {
    public static void main(String[] args) {

        Runnable runnable = () -> {
            MyObject01 myObject = MyObject01.getMyObject();
            System.out.println(myObject.hashCode());
        };

        for (int i = 0; i < 10; i++) {
            Thread thread = new Thread(runnable);
            thread.start();
        }
        Runnable runnable_1 = () -> {
            MyObject01_1 myObject = MyObject01_1.getMyObjectInstance();
            System.out.println(myObject.hashCode());
        };

        for (int i = 0; i < 10; i++) {
            Thread thread = new Thread(runnable_1);
            thread.start();
        }

    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/461872.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号