并发编程的三个重要特性

本文详细探讨了并发编程的三个关键特性:原子性、有序性和可见性。原子性确保操作不可中断,例如银行转账;有序性涉及指令重排,但保证最终结果正确;可见性则关乎线程间共享变量的更新可见性,volatile关键字在此起到作用。理解这些特性对于编写线程安全的代码至关重要。
摘要由CSDN通过智能技术生成

一 点睛

并发编程的三个重要特性是原子性、有序性和可见性。

二 原子性

指在一次的操作或者多次操作中,要么所有的操作全部得到执行并且不会受到任何因素的干扰而中断,要么所有的操作都不执行。

银行转账是原子性最好的例子,转账要么成功,要么失败。不可能出现其他状态。否则就是代码写得有问题,这种情况是客户不允许的。

再举一个例子

Object o = new Object();

引用类型 o 占用四个字节(32位),假设这样的赋值语句不能够保证原子性的话,那么会出现赋值出现错误的数据,所以它也是原子性的。

注意

两个原子性的操作结合在一起未必还是原子的,比如 i++,它包括 get i,i+1,set i=x,三个过程,三个过程都是原子性操作,但不代表 i++ 就是原子性操作。

volatile 关键字不保证数据的原子性,synchronized 关键字保证,从 JDK 1.5 版本开始,其提供的原子类型变量也可以保证原子性。

三 可见性

可见性是指,当一个线程对共享变量进行了修改,那么另外的线程可以立即看到修改后的新值。

new Thread(() -> {
    int localValue = init_value;
    while (localValue < MAX) {
        if (init_value != localValue) {
            System.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值