资讯专栏INFORMATION COLUMN

Java 多线程编程核心技术6—单例模式与多线程

TesterHome / 2043人阅读

摘要:使用双检查机制来实现多线程环境中的延迟加载单例设计模式。类主要负责日期的转换与格式化,但在多线程环境中,使用此类容易造成数据转换及处理的不准确,因为类并不是线程安全的。

立即加载就是使用类的时候已经将对象创建完毕,常见的实现办法就是直接new实例化。而立即加载从中文的语境来看,有“着急”、“急迫”的含义,所以也称为“饿汉模式”。

package com.zxf.demo.singleton_0;

public class MyObject {
    
    private static MyObject myobject = new MyObject();
    
    private MyObject(){
        
    }
    
    public static MyObject getInstatance(){
        //立即加载/饿汉模式
        //缺点是不能有其他实例变量
        //因为getInstance()方法没有同步,所以有可能出现非线程安全问题
        return myobject;
    }

}

延迟加载就是在调用get()方法时实例才被创建,常见的实现办法就是在get()方法中进行new实例化。而延迟加载从中文的语境来看,是“缓慢”、“不急迫”的含义,所以也称为“懒汉模式”。

package com.zxf.demo.singleton_1;

public class MyObject {
    
    private static MyObject myobject;
    
    private MyObject(){
        
    }
    
    public static MyObject getInstatance(){
        
        if(myobject != null){
        }else{
            myobject = new MyObject();
        }
        
        return myobject;
    }

}

此方法加入同步synchronized关键字得到相同的实例对象,,但此方法的运行效率非常低下,是同步运行的,下一个线程想要取得对象,则必须等上一个线程释放锁之后,才可以继续执行。

使用DCL双检查机制来实现多线程环境中的延迟加载单例设计模式。

NEW状态是线程实例化后还从未执行start()方法时的状态,而runnable状态是线程进入运行的状态,terminated是线程被销毁时的状态。

执行sleep()方法后线程的状态是timed_waiting。BLOCKED状态出现在某一个线程在等待锁的时候。

执行wait()方法后线程的状态枚举值就是waiting。

线程组的作用是,可以批量的管理线程或者线程对象,有效地对线程活线程组对象进行组织。

所谓的1级关联就是父对象中有子对象,但不创建子孙对象。

类SimpleDateFormat主要负责日期的转换与格式化,但在多线程环境中,使用此类容易造成数据转换及处理的不准确,因为SimpleDateFormat类并不是线程安全的。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/68230.html

相关文章

  • Java 线程核心技术梳理(附源码)

    摘要:本文对多线程基础知识进行梳理,主要包括多线程的基本使用,对象及变量的并发访问,线程间通信,的使用,定时器,单例模式,以及线程状态与线程组。源码采用构建,多线程这部分源码位于模块中。通知可能等待该对象的对象锁的其他线程。 本文对多线程基础知识进行梳理,主要包括多线程的基本使用,对象及变量的并发访问,线程间通信,lock的使用,定时器,单例模式,以及线程状态与线程组。 写在前面 花了一周时...

    Winer 评论0 收藏0
  • Java面试 32个核心必考点完全解析

    摘要:如问到是否使用某框架,实际是是问该框架的使用场景,有什么特点,和同类可框架对比一系列的问题。这两个方向的区分点在于工作方向的侧重点不同。 [TOC] 这是一份来自哔哩哔哩的Java面试Java面试 32个核心必考点完全解析(完) 课程预习 1.1 课程内容分为三个模块 基础模块: 技术岗位与面试 计算机基础 JVM原理 多线程 设计模式 数据结构与算法 应用模块: 常用工具集 ...

    JiaXinYi 评论0 收藏0
  • 你和阿里资深架构师之间,差的不仅仅是年龄(进阶必看)

    摘要:导读阅读本文需要有足够的时间,笔者会由浅到深带你一步一步了解一个资深架构师所要掌握的各类知识点,你也可以按照文章中所列的知识体系对比自身,对自己进行查漏补缺,觉得本文对你有帮助的话,可以点赞关注一下。目录一基础篇二进阶篇三高级篇四架构篇五扩 导读:阅读本文需要有足够的时间,笔者会由浅到深带你一步一步了解一个资深架构师所要掌握的各类知识点,你也可以按照文章中所列的知识体系对比自身,对自己...

    huaixiaoz 评论0 收藏0
  • 设计模式 单例模式

    摘要:单例模式确保一个类只有一个实例,而且自动实例化并向整个系统提供这个实例。将构造函数设置为私有的,防止外界出该类的实例,从而失去了单例的意义。这种实现的单例模式是最简单的,同时多个线程操作该单例时也不会有问题。这就违反了单例模式。 单例模式 确保一个类只有一个实例,而且自动实例化并向整个系统提供这个实例。 实现 饿汉式 很简单。 将构造函数设置为私有的,防止外界new出该类的实例,从而...

    Sourcelink 评论0 收藏0

发表评论

0条评论

TesterHome

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<