`

可见性——“重排序”现象

阅读更多

代码示例:

public class NoVisibility {
    private static boolean ready;
    private static int number;

    private static class ReaderThread extends Thread {
        public void run() {
            while (!ready)
                Thread.yield();
            System.out.println(number);
        }
    }

    public static void main(String[] args) {
        new ReaderThread().start();
        number = 42;
        ready = true;
    }
}

 

NoVisibility可能会一直循环,因为对于读线程来说,ready的值可能永远不可见。甚至更奇怪的现象是,NoVisibility可能会打印0,因为早在对number赋值之前,主线程就已经写入ready并使之对读线程可见,这是一种“重排序”现象。

 

注意:在没有同步的情况下,编译器,处理器,远行时安排操作的执行顺序可能完全出人意料。在没有进行适当同步的多线程程序中,尝试推断那些“必然”发生在内存中的动作时,你总是会判断错误。

 

分享到:
评论

相关推荐

    面试题解惑系列(十)——话说多线程

    3. **volatile**:保证变量在多个线程之间的可见性,防止指令重排序。 4. **Lock接口**:如ReentrantLock,提供比synchronized更强大的锁控制能力,如可中断的锁等待、公平锁等。 **五、死锁** 当两个或多个线程...

    自我成长——时间管理.ppt

    浪费时间的现象在生活中随处可见,例如反复阅读同一材料、未达成目标、过多的琐碎事务、文件管理不当等。为了找出问题根源,我们可以问自己:做了哪些不必要的事?哪些本可由他人代劳?哪些任务耗时过长?通过反思...

    Java并发学习笔记(二)——Synchronized关键字与ReetrantLock同步锁

    Synchronized关键字和ReentrantLock是两种常见的同步机制,它们都用于保证线程的原子性、可见性和有序性,防止数据的不一致性。 1. **Synchronized关键字** - **概念**:Synchronized是Java内置的同步机制,它通过...

    南京2017年事业编招聘考试真题及答案解析可复制.docx

    - 沪语文化在多个文学艺术领域出现复苏迹象,这一现象引发了文化界的普遍关注——表述清晰准确; - 为什么对于这种浪费资源的现象至今没有引起有关部门的重视呢?——表述不完整,缺乏主语。 **答案:**“不久前...

    (1996) - Feynman Lectures on Computation (Feynman).pdf

    - **示例二**:在讨论算法时,费曼介绍了一种简单的排序算法——冒泡排序。他通过这个例子展示了算法的设计思路和实现过程,帮助听众理解算法的基本原理。 - **示例三**:对于编程语言的部分,费曼对比了汇编语言和...

    5什么比猎豹的速度更快——小学生ppt学习课件

    ### 5什么比猎豹的速度更快——小学生PPT学习课件知识点详解 #### 课程导入 本课程旨在通过一系列生动有趣的例子,引导学生探索比猎豹速度更快的事物。猎豹作为陆地上奔跑速度最快的动物,其最高速度可达约110公里/...

    java超有用的面试题目

    - `volatile`关键字保证变量的可见性和禁止指令重排序。 - 即使使用`volatile`修饰,某些情况下仍需其他同步手段确保线程安全。 #### G1与CMS的区别 - **G1**:面向服务端应用,支持并行与并发,目标是最短的停顿...

    QC七大手法之四(鱼骨图)_品质管理品管.ppt

    柏拉图根据收集的数据,按问题的严重程度或发生频率排序,以图形形式展示,使得“重要的少数”和“琐碎的多数”现象清晰可见,有助于资源的优化分配。 此外,鱼骨图还可以与其他QC七大手法相结合,如数据收集与查检...

    计算机二级公共基础知识

    算法一般具有4个基本特征:可行性、确定性、有穷性、拥有足够的情报。 (2)算法的基本运算和操作 算法的基本运算和操作包括:算术运算、逻辑运算、关系运算、数据传输。 (3)算法的3种基本控制结构 算法的3种基本...

    DataGrid数据刷新及选择.rar

    在.NET框架中,WPF(Windows Presentation Foundation)提供了一个强大的数据呈现控件——DataGrid,它用于显示和操作大量结构化的数据。这个“DataGrid数据刷新及选择.rar”压缩包包含了一个WPF应用实例,专注于...

    部分大型公司的C面试题

    相比之下,`static` 关键字用于限定变量或函数的作用域和可见性,而不是仅仅声明变量的存在。 ### 2. 内存管理 - **内存分配:** - 程序运行时,内存可以分为几个区域,包括栈区、堆区、静态数据区等。 - 栈区...

    Scratch蓝桥杯科学素养考试卷初级组模拟题附答案

    11. **视野与高度的关系**:“欲穷千里目,更上一层楼”反映了随着观察者高度的增加,可见范围也随之增大的现象。这涉及到几何光学原理。 12. **月球表面结构**:题目指出“夜晚时如果仔细观察月亮,可以发现月亮...

    jQuery权威指南-源代码

    2.2.5 可见性过滤选择器/27 2.2.6 属性过滤选择器/28 2.2.7 子元素过滤选择器/30 2.2.8 表单对象属性过滤选择器/32 2.2.9 表单选择器/34 2.3 综合案例分析—导航条在项目中的应用/37 2.3.1 需求分析/37 2.3.2...

    一种抵抗链接作弊的PageRank改进算法

    链接作弊主要包括链接农场、交换链接、黄金链、财富链等方式,这些作弊手段严重干扰了搜索引擎的正常排序机制,导致用户搜索结果的准确性大大降低。为了解决这一问题,本文提出了一种新的PageRank改进算法——...

Global site tag (gtag.js) - Google Analytics