java--线程安全问题
概念Java线程安全问题本质上是在多线程环境下由于线程调度的不确定性导致程序的执行结果与预期不符。线程安全问题的产生通常可以归结为以下三个核心原因原子性问题 (Atomicity)一个看似简单的操作如count在底层实际上包含了读取、修改、写入三个步骤。如果这些步骤没有作为一个不可分割的整体即原子操作来执行就可能被其他线程打断。例如两个线程同时对一个变量进行自增可能因为操作交错导致最终结果只增加了一次。可见性问题 (Visibility)根据Java内存模型JMM每个线程都有自己的工作内存类似于CPU缓存保存了主内存中共享变量的副本。一个线程对变量的修改可能只更新到了自己的工作内存中而没有及时刷新回主内存导致其他线程无法看到最新的值。有序性问题 (Ordering)为了优化性能编译器或处理器可能会对指令的执行顺序进行重排Instruction Reordering。虽然在单线程下这不会有问题但在多线程环境下这种重排可能导致一个线程看到的操作顺序与代码编写的顺序不一致从而引发错误。这里主要介绍12两者以及对应解决方法1.使用synchronized关键字它可以保证代码块或方法的原子性和可见性。同一时刻只有一个线程能进入被synchronized修饰的代码区域其他线程必须等待。(原子操作简单来说原子操作就是指一个操作在执行过程中不会被线程调度机制打断)2.使用volatile关键字它主要用于保证变量的可见性和有序性禁止指令重排但不保证操作的原子性。下面以两个程序展示用法【1】synchronized添加synchronized关键字后同步代码块执行后输出结果为20000若不加synchronized锁结果偏小package Thread_Learning; /** * author jinhuang * date 2026/2/5 9:59 * description */ public class ThreadDemo1 extends Thread{ static int count0; static Object lockobjnew Object(); Override public void run() { for (int i 0; i 10000; i) { //同步代码块 synchronized(lockobj){ count; } } } public static void main(String[] args) { ThreadDemo1 t1new ThreadDemo1(); ThreadDemo1 t2new ThreadDemo1(); t1.start(); t2.start(); try { t1.join(); t2.join(); } catch (InterruptedException e) { throw new RuntimeException(e); } System.out.println(count); } }【2】volatile// 具备可见性当一个线程修改之后另一个线程可以立马更新// 被这个词修饰的变量在每次使用时都会更新 查看堆内存的数据是否更改若没有volatile关键字无法正常执行完A程序package Thread_Learning; /** * author jinhuang * date 2026/2/5 10:06 * description */ class ThreadDemo3 extends Thread{ ThreadDemo2 td2; Override public void run() { System.out.println(线程B启动); td2.isflagtrue; System.out.println(线程B执行完成); } } public class ThreadDemo2 extends Thread{ volatile boolean isflag; Override public void run() { System.out.println(线程A启动); while (true){ if(isflag){ break; } } System.out.println(线程A执行完成); } public static void main(String[] args) { ThreadDemo2 t2new ThreadDemo2(); ThreadDemo3 t3new ThreadDemo3(); t3.td2t2; t2.start(); t3.start(); } }

相关新闻

探索六轴EtherCAT总线伺服涂布收卷机程序的奇妙世界

探索六轴EtherCAT总线伺服涂布收卷机程序的奇妙世界

六轴EtherCAT总线伺服涂布收卷机程序,采用六个伺服变频器编码器,动态测量频率,计算转速,再换算频率,用变频器同步伺服电机速度,进行通讯控制,具备一定参考价值。 在自动化控制领域,六…

2026/7/3 4:34:24 阅读更多 →
开题报告 springboot和vue-信贷管理信息系统

开题报告 springboot和vue-信贷管理信息系统

目录 系统背景与需求技术选型分析核心功能模块系统优势应用场景 项目技术支持可定制开发之功能亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作 系统背景与需求 信贷管理信息系统旨在解决传统信贷业务中流程繁琐、数据分散、效率低下等…

2026/7/5 5:59:40 阅读更多 →
【苹果分级】基于matlab图像处理的苹果品质自动分级系统设计与实现【含Matlab源码 B7Z027期】

【苹果分级】基于matlab图像处理的苹果品质自动分级系统设计与实现【含Matlab源码 B7Z027期】

💥💥💥💥💥💥💞💞💞💞💞💞💞💞欢迎来到海神之光博客之家💞💞💞&#x1f49…

2026/7/3 14:18:31 阅读更多 →

最新新闻

终端别名清理:解决Shell会话冲突的实用技巧

终端别名清理:解决Shell会话冲突的实用技巧

1. 问题背景:为什么需要清理终端别名?在macOS或Linux系统中,alias(别名)是提高终端操作效率的利器。它允许我们将冗长的命令简化为短小的别名,比如用ll代替ls -l。但这也带来了一个常见问题:当我…

2026/7/5 11:51:29 阅读更多 →
Unity 2019.2.1 Ragdoll 性能优化:10个角色同屏实测,CPU占用降低40%方案

Unity 2019.2.1 Ragdoll 性能优化:10个角色同屏实测,CPU占用降低40%方案

Unity 2019.2.1 Ragdoll 性能优化实战:10角色同屏CPU占用降低40%的完整方案在移动端或中低配PC上实现大规模Ragdoll效果时,性能问题往往成为开发者的噩梦。本文将分享一套经过实战验证的优化方案,通过10个Ragdoll角色同屏测试,成功…

2026/7/5 11:45:28 阅读更多 →
AI时代技术人的核心壁垒:从想法到产品的转化能力实战指南

AI时代技术人的核心壁垒:从想法到产品的转化能力实战指南

这次我们来看一个关于“未来十年,将Idea落地的转化能力为何是人类的核心壁垒?”的深度探讨。这个话题看似偏向思维层面,但在技术领域,尤其是AI技术飞速发展的今天,它变得前所未有的具体和紧迫。我们不再空谈概念&#…

2026/7/5 11:43:27 阅读更多 →
基于YOLOv8的GUI元素自动化检测工具开发实践

基于YOLOv8的GUI元素自动化检测工具开发实践

1. 项目概述:GUI元素检测的自动化解决方案在软件测试和自动化领域,GUI元素检测一直是个痛点问题。传统基于坐标定位或元素树解析的方法在面对动态界面时表现脆弱,而基于计算机视觉的解决方案往往需要复杂的配置。这个项目将YOLO目标检测模型与…

2026/7/5 11:41:27 阅读更多 →
【开源推荐】S标签页 (STab) —— 一款融合双重核心功能的极简高效浏览器起始页(标签页)

【开源推荐】S标签页 (STab) —— 一款融合双重核心功能的极简高效浏览器起始页(标签页)

【开源推荐】S标签页 (STab) —— 一款融合双重核心功能的极简高效浏览器起始页(标签页) 📌 前言 在日常浏览网页时,你是否经常遇到以下痛点: 浏览器原生收藏夹层级太深,查找和管理非常繁琐?…

2026/7/5 11:41:27 阅读更多 →
企业级AI应用实战:基于Hermes Agent与Harness Engineering的智能体开发与工程化部署

企业级AI应用实战:基于Hermes Agent与Harness Engineering的智能体开发与工程化部署

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 这次我们聚焦一个在企业级AI大模型应用开发中备受关注的技术组合: Hermes Agent 与 Harness Engineering 。如果你正在…

2026/7/5 11:39:26 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻