0%

安全发布对象

2018年4月6日 下午4:08

2018年11月19日
这篇文章的知识点与其他文章知识点的不同是:这篇文章是站在对象的角度去分析的,教我们如何使用java书写一个好的类和对象。其他文章更多的是站在线程的角度去分析问题的。

如何判断在多线程下是否会出问题?

  1. 线程安全性看当前方法、属性是否使用这节的内容进行处理
  2. 假设,两个线程执行到同一类的同一个方法的同一行语句,看这时是否会出问题!!

总结:

  1. 慕课网高并发实战(五)- 安全发布对象 - 简书这篇文章写得不全
  2. Hi,我们再来聊一聊Java的单例吧 - 简书这篇文章基本上把老师这节讲的都讲了:懒汉模式(及其各种优化、volatile优化,synchronized优化)、饿汉模式(以及它的缺点)、枚举方式、具体的知识点的讲解
  3. 这节对应的代码在singleton文件夹下。
  4. 同时也熟悉一些java的高级语法
    1. 内部类
      1. 可以new外部类的对象
    2. 安全关键字:volatile使用,synchronized使用。上节课的知识点的应用。
    3. 枚举类
      1. 语法
    4. 静态块
      1. 注意顺序
    5. 私有构造方法
      1. 懒汉+饿汉都是使用私有的构造方法作为基础。
  5. 关于懒汉模式中使用volatile关键字起效的原因
  6. 这里注意静态块和静态变量的顺序,当然这也是结合情况分析,在这里的代码中的顺序必须是这样。
    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
    32
    package com.mmall.concurrency.example.singleton;

    import com.mmall.concurrency.annoations.ThreadSafe;

    /**
    * 饿汉模式
    * 单例实例在类装载时进行创建
    */
    @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());
    }
    }