Happens-Before 规则总结

本文详细解析了并发编程中至关重要的Happens-Before规则,涵盖程序顺序性、volatile变量、传递性、管程锁、线程启动与join六大规则,帮助读者深入理解线程间的可见性与一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在并发编程中Happens-Before 规则是相当重要的规则,它所代表的意思是前面一个操作对后续操作是可见的,共有6项规则如下:

  1. 程序的顺序性规则
  2. volatile 变量规则
  3. 传递性
  4. 管程中锁的规则
  5. 线程 start() 规则
  6. 线程 join() 规则
    分别对以上6种规则进行解释:
    1.程序的顺序性规则
    程序的顺序性指的是代码会按照书写的顺序去执行,也就是单线程方式。
    2.volatile 变量规则
    对一个 volatile 变量的写操作, Happens-Before 于后续对这个 volatile的读操作。
    理解:如果两个线程对共有变量进行操作,前一个线程对变量的写操作,对后续另一个变量的读操作是可见的。
    3.传递性
    如果 A Happens-Before B,且 B Happens-Before C,那么 A Happens-Before C。
    这需要举个例子,传递性结合1和2进行说明,首先一个线程有2个变量,其中第一句话是赋值语句,然后两个线程通过volatile关联起来,然后另一个线程能读到第一个线程中的变量。
    4 管程中锁的规则
    对一个锁的解锁 Happens-Before 后续对这个锁的加锁.
    管程是什么意思?
    synchronized,synchronized 是管程的实现,编译器实现了同步代码块的加锁和解锁操作。
    5 .线程 start() 规则
    主线程 A 启动子线程 B 后,子线程 B 能够看到主线程在启动子线程 B 前的操作。
    6.线程 join() 规则
    关于线程等待的。它是指主线程 A 等待子线程 B 完成(主线程 A 通过调用子线程 B 的 join() 方法实现),当子线程 B 完成后(主线程 A 中 join() 方法),主线程能够看到 子线程的操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值