线程安全问题 --- 内存可见性问题

小王学习录

    • 本月鸡汤:
    • 什么是内存可见性问题
    • 引起内存可见性问题的原因
    • 如何解决内存可见性问题
    • volatile使用规范
    • 编外: 工作内存(工作存储区)

由前面文章介绍可以知道, 引起线程安全问题有 五个原因, 分别是: 线程抢占式执行, 随即调度(根本原因); 多个线程对同一变量执行 修改操作; 非原子操作; 内存可见性问题; 指令重排序. 而第二第三可以通过 上锁来解决, 第四第五需要用到 volatile关键字, 今天将介绍 volatile关键字

本月鸡汤:

人之所以痛苦, 在于追求错误的东西.

什么是内存可见性问题

所谓内存可见性, 就是当两个线程同时访问一个变量, 其中一个变量发生变化时, 另一个线程能够及时获取该变量的最新值, 注意区分这里的内存可见性和之前的脏读, 不可重复读
那么内存安全性问题便是当两个线程同时访问一个变量, 其中一个变量发生变化时, 另一个线程无法获取该变量最新值, 这个问题要使用volatile来解决

引起内存可见性问题的原因

– 先看如下代码和其运行结果:

import java.util.Scanner;

public class ThreadDome1 {
   
    int a = 0;
    public static void main(String[] args) {
   
        ThreadDome1 t = new ThreadDome1();
        Thread t1 = new Thread(()

你可能感兴趣的:(操作系统,安全,java,操作系统,系统安全,内存可见性,开发语言,软件工程)