volatitle详解

学习多线程并发,要着重“外炼互斥,内修可见,内功有序”,这是掌握多线程/学习多线程和并发技术的重要知识点。

volatitle

关键字volatitle 的主要作用是让其他线程可以看到最新的值,volatile 只能修饰变量。它包含三个特征:

 - 可见性:B线程能马上看到A线程更改的数据
 - 原子性:在32位系统中,针对未使用volatile声明的longdouble数据类型没有实现写原子性,如果想实现,则声明变量是添加volatile,而在64位系统中,原子性取决于具体的实现,在X86架构64为JDK版本中,写doublelong是原子的。另外,针对volatile声明的 int I 变量进行 i++操作时是非原子的
 - 禁止代码重排序

synchronized

关键字synchronized 的主要作用是保证同一时刻,只有一个线程可以执行某一个方法,或是某一个代码块,syncronized可以修饰方法及代码块。随着JDK的版本升级synchronized关键字在执行效率上得到很大提升。它包含三个特征。
 - 可见性:synchronized 具有可见性
 - 原子性: 使用sync 实现了同步,同步实现了原子性,保证被同步的代码段在同一时间只有一个线程在执行
 - 禁止代码重排序:sync禁止代码重排序

使用场景

关键字volatil和synchronized的使用场景总结如下:
 - 当想实现一个变量的值被更改时,让其他线程能取到最新的值时,就要对变量使用volatil
 - 当多个线程对同一个对象中的同一个实例变量进行操作时,为了避免出现非线程安全的问题就要使用synchronized

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值