Java基础学习:单例模型的双重检查+volatile实现

系列文章目录



单例模型的双重检查+volatile实现

public class HoonSingleton {
 
    private static volatile HoonSingleton hoonSingleton = null;
 
    // 使用sync同步HoonSingleton.class 两次判断hoonSingleton是否为null 避免并发导致hoonSingleton被重新实例化
    // 并没有对整个方法使用sync,锁的粒度变小了,实现了实例对象的唯一性
    public static HoonSingleton getInstance(){
        if(hoonSingleton==null){
            synchronized (HoonSingleton.class) {
                if(hoonSingleton==null) {
                    hoonSingleton = new DCL();
                }
            }
        }
        return hoonSingleton;
    }

一、我的思考

1、volatile的作用是啥? 是指令重排序吗?

在这里, volatile的作用是: 在单例创建后,强制刷缓存, 从而保证该字段的可见性
疑问1 : 指令重排序对单例模式有帮助?
疑问2 : volatile的作用是啥 ? 保证可见性, 有序性
疑问3 : volatile是如何保证有序性的 ?

2、第一个非空判断作用是啥?

我认为是用来提高性能的, 除第一次外,其余每次都直接返回单例

3、为啥锁住第二个非空判断?

第二个非空判断,以及里面的内容,才是一次创建实例的原子操作, 所以要锁住.


二、使用步骤

1.引入库

代码如下(示例):

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import  ssl
ssl._create_default_https_context = ssl._create_unverified_context

2.读入数据

代码如下(示例):

data = pd.read_csv(
    'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())

该处使用的url网络请求的数据。


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值