系列文章目录
文章目录
单例模型的双重检查+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提供了大量能使我们快速便捷地处理数据的函数和方法。