当前位置: 首页 > article >正文

【Java并发编程之如何在线程中安全地访问一个全局Boolean类型的静态变量?】

Java并发编程之如何在线程中安全地访问一个全局Boolean类型的静态变量?

    • 0x00 存在并发问题的代码
    • 0x01 修复方案
      • 方案一 使用 volatile 关键字
      • 方案二 使用 synchronized 同步
      • 方案三 使用 AtomicBoolean 原子类
    • 0x02 选择策略

在Java中,保证多线程访问全局布尔变量时的读写安全性,需综合考虑可见性和原子性。

0x00 存在并发问题的代码

静态全局变量

public class FunctionSwitchConstant {
   
    public static boolean ENABLE_FLAG=false;
    public void setFlag(boolean value) {
   
        ENABLE_FLAG= value;
    }
	public boolean getFlag() {
   
	    return ENABLE_FLAG;
	}
}

消费队列

public class ShareBlockingDequeConstants {
   
    public static volatile BlockingDeque<Runnable> TASK_QUEUE = new LinkedBlockingDeque<>();
}

这里假设在其他地方已经对TASK_QUEUE 做了任务添加。

线程类

@Slf4j
public class ConsumerThread implements Runnable{
   

    @Override
    public void run() {
   
        if(log.isInfoEnabled()){
   
            log

http://www.kler.cn/a/544013.html

相关文章:

  • IEEE期刊Word导出PDF注意事项
  • 云服务器流量包用尽(中病毒)
  • uniapp 编译生成鸿蒙正式app步骤
  • MybatisPlus常用增删改查
  • 如何将3DMAX中的3D文件转换为AutoCAD中的2D图形?
  • 参考数据和主数据:构建数据管理的基石
  • 详解spotbugs -textui常用命令(包括生成html测试报告)
  • Vue.js 响应式原理与数据绑定
  • 4. React 中的 CSS
  • Visual Studio 中的键盘快捷方式
  • 【Leetcode 每日一题】1760. 袋子里最少数目的球
  • 【C++学习笔记】if 和 if constexpr
  • Openssl的使用,CA证书,中间证书,服务器证书的生成与使用
  • 如何设计一个高效、稳定的秒杀系统?
  • 【AI】增长迅猛的DeepSeek
  • 《qt+easy3d 网格读取》
  • [Do374]ansible-nagivator考前整理
  • 探索边缘计算网关在优化交通信号控制中的关键角色
  • 【C】链表算法题7 -- 环形链表||
  • HARCT 2025 分论坛9:专用设备和机器人系统
  • 爬虫抓取过程的详细步骤
  • 自动驾驶,不同摄像头安装pitch角度, 同一个模型, 对单目深度精度有影响吗...
  • zyNo.22
  • 基于STM32的ADS1230驱动例程
  • 01、单片机上电后没有正常运行怎么办
  • docker快速部署oracle11g