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

Java实现线程安全的几种方式:常量/数据私有/互斥同步/非阻塞同步

1.常量:
数据声明成常量,使数据无法被修改,则一定线程安全。

  • final声明的基本数据类型
  • String
  • 枚举类型

2.数据私有
将数据变成线程私有的数据

  • 栈(局部变量):多个线程访问同一个方法的局部变量时,不会出现线程安全问题,因为局部变量存储在虚拟机栈中,属于线程私有的。
  • Thread Local:线程本地存储机制

3.互斥同步
java提供锁机制控制多线程对共享资源的访问,只允许获取锁的线程执行。

  • synchronized:JVM实现
  • ReentrantLock:JDK实现
    线程的阻塞和唤醒消耗性能,影响程序的性能。适合修改多的场景。

4.非阻塞同步
先进行操作,如果没有其它线程争用共享数据,那操作就成功

  • CAS机制:乐观锁
  • 版本号
  • 原子类AtomicInteger:CAS机制
    适合查询多修改少的场景。

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

相关文章:

  • C#中System.Text.Json:从入门到精通的实用指南
  • springboot医院信管系统
  • Spring Boot + Apache POI 实现 Excel 导出:BOM物料清单生成器(支持中文文件名、样式美化、数据合并)
  • 2,Linux文件基本属性(基于Ubuntu示例进行讲解)
  • 考研计算机组成原理——零基础学习的笔记
  • 高性能、并发安全的 Go 嵌入式缓存库 如何使用?
  • 【数据结构 10】位图
  • jmeter-问题一:关于线程组,线程数,用户数详解
  • 5分钟快速掌握 XML (Extensible Markup Language)
  • 【51单片机】开发板&开发软件(Keil5&STC-ISP)简介&下载安装破译传送门(1)
  • QT styleSheet——控件设置样式表
  • 【BBF系列协议】TR101 基于以太网的宽带聚合的迁移
  • 交友系统---让陌生人变成熟悉人的过程。APP小程序H5三端源码交付,支持二开。
  • Hudi学习 6:Hudi使用
  • 如何在Vue应用程序中使用Vue-Router来实现路由嵌套动画效果
  • C# 使用 MailKit 发送邮件(附demo)
  • html2canvas 截图功能使用 VUE
  • 一步一步写线程之六数据通信并发模型Actor和CSP
  • 代码随想录算法训练营DAY13 | 栈与队列 (3)
  • Matlab:利用1D-CNN(一维卷积神经网络),分析高光谱曲线数据或时序数据
  • 从编程中理解:大脑的成瘾行为
  • 神经网络激活函数到底是什么?
  • Log360,引入全新安全与风险管理功能,助力企业积极抵御网络威胁
  • 前端的事件代理
  • 【C++】I/O多路转接详解(二)
  • ReactNative实现弧形拖动条