2018年4月6日 下午4:08
2018年11月19日
这篇文章的知识点与其他文章知识点的不同是:这篇文章是站在对象的角度去分析的,教我们如何使用java书写一个好的类和对象。其他文章更多的是站在线程的角度去分析问题的。
如何判断在多线程下是否会出问题?
- 线程安全性看当前方法、属性是否使用这节的内容进行处理
- 假设,两个线程执行到同一类的同一个方法的同一行语句,看这时是否会出问题!!
总结:
- 慕课网高并发实战(五)- 安全发布对象 - 简书这篇文章写得不全
- Hi,我们再来聊一聊Java的单例吧 - 简书这篇文章基本上把老师这节讲的都讲了:懒汉模式(及其各种优化、volatile优化,synchronized优化)、饿汉模式(以及它的缺点)、枚举方式、具体的知识点的讲解
- 这节对应的代码在singleton文件夹下。
- 同时也熟悉一些java的高级语法
- 内部类
- 可以new外部类的对象
- 安全关键字:volatile使用,synchronized使用。上节课的知识点的应用。
- 枚举类
- 语法
- 静态块
- 注意顺序
- 私有构造方法
- 懒汉+饿汉都是使用私有的构造方法作为基础。
- 内部类
- 关于懒汉模式中使用volatile关键字起效的原因

- 这里注意静态块和静态变量的顺序,当然这也是结合情况分析,在这里的代码中的顺序必须是这样。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32package com.mmall.concurrency.example.singleton;
import com.mmall.concurrency.annoations.ThreadSafe;
/**
* 饿汉模式
* 单例实例在类装载时进行创建
*/
public class SingletonExample6 {
// 私有构造函数
private SingletonExample6() {
}
// 单例对象
private static SingletonExample6 instance = null;
// 静态块的代码必须放在单例对象声明之前
static {
instance = new SingletonExample6();
}
// 静态的工厂方法
public static SingletonExample6 getInstance() {
return instance;
}
public static void main(String[] args) {
System.out.println(getInstance().hashCode());
System.out.println(getInstance().hashCode());
}
}