volatile关键字能否保证线程安全?

单纯使用 volatile 关键字是不能保证线程安全的

  • volatile 只提供了一种弱的同步机制,用来确保将变量的更新操作通知到其他线程
  • volatile 语义是禁用 CPU 缓存,直接从主内存读、写变量。表现为:更新 volatile 变量时,JMM 会把线程对应的本地内存中的共享变量值刷新到主内存中;读 volatile 变量时,JMM 会把线程对应的本地内存设置为无效,直接从主内存中读取共享变量
  • 当把变量声明为 volatile 类型后,JVM 增加内存屏障,禁止 CPU 进行指令重排

 


【Java面试题与答案】整理推荐

  • 基础与语法
  • 集合
  • 网络编程
  • 并发编程
  • Web
  • 安全
  • 设计模式
  • 框架
  • 算法与数据结构
  • 异常
  • 文件解析与生成
  • Linux
  • MySQL
  • Oracle
  • Redis
  • Dubbo

 

你可能感兴趣的:(自做,Java,面试题)