栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

volatile 与 synchronized

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

volatile 与 synchronized

volatile 关键字: 当多个线程进行操作共享数据时,可以保证内存中的数据是可见的;相较于 synchronized 是一种较为轻量级的同步策略 volatile 不具备"互斥性" volatile 不能保证变量的"原子性"

可见性: 可见性是一种复杂的属性,因为可见性中的错误总是会违背我们的直觉。通常,我们无法确保执行读操作的线程能适时地看到其他线程写入的值,有时甚至是根本不可能的事情。为了 确保多个线程之间对内存写入操作的可见性,必须使用同步机制。

用volatile修饰的变量,就会具有可 见性。volatile修饰的变量不允许线程内部缓存和重排序,即直接修改内存。所以对其他线 程是可见的。但是这里需要注意一个问题,volatile只能让被他修饰内容具有可见性,但不 能保证它具有原子性。比如 volatile int a = 0;之后有一个操作 a++;这个变量a具 有可见性,但是a++ 依然是一个非原子操作,也就是这个操作同样存在线程安全问题

结果不定

Volatie声明变量后对所有线程可见,通常适用于共享变量

*volatile并不能保证多个线程共同修改running变量时所带来的不一致问题,也就是说volatile 不能替代synchronized

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/733245.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号