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

java--线程安全问题

概念:Java线程安全问题,本质上是在多线程环境下,由于线程调度的不确定性,导致程序的执行结果与预期不符。

线程安全问题的产生通常可以归结为以下三个核心原因:

  1. 原子性问题 (Atomicity)
    一个看似简单的操作(如count++),在底层实际上包含了读取、修改、写入三个步骤。如果这些步骤没有作为一个不可分割的整体(即原子操作)来执行,就可能被其他线程打断。例如,两个线程同时对一个变量进行自增,可能因为操作交错,导致最终结果只增加了一次。

  2. 可见性问题 (Visibility)
    根据Java内存模型(JMM),每个线程都有自己的工作内存(类似于CPU缓存),保存了主内存中共享变量的副本。一个线程对变量的修改可能只更新到了自己的工作内存中,而没有及时刷新回主内存,导致其他线程无法看到最新的值。

  3. 有序性问题 (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 count=0; static Object lockobj=new Object(); @Override public void run() { for (int i = 0; i < 10000; i++) { //同步代码块 synchronized(lockobj){ count++; } } } public static void main(String[] args) { ThreadDemo1 t1=new ThreadDemo1(); ThreadDemo1 t2=new 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.isflag=true; 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 t2=new ThreadDemo2(); ThreadDemo3 t3=new ThreadDemo3(); t3.td2=t2; t2.start(); t3.start(); } }
http://www.jsqmd.com/news/345340/

相关文章:

  • 好写作AI:专治“对着空白文档发呆”,你的灵感急救呼吸机!
  • 全网最全8个降AIGC网站,千笔AI助你高效降AI率
  • 真心不骗你!继续教育论文神器 —— 千笔ai写作
  • 导师推荐!千笔,顶尖配置的AI论文写作软件
  • 格式总出错?AI论文工具 千笔 VS 文途AI,本科生写作更轻松!
  • Jenkins节点拉取代码报错场景及解决方案全解析
  • chrome://settings/content/all
  • 2026年湿度仪靠谱生产商费用分析,昶艾科技定制生产价格合理 - 工业品网
  • 计算机网络经典问题透视:蜂窝网络切换如何“扼杀”你的TCP连接?
  • 计算机毕设java助学金管理系统 高校学生资助信息管理平台 校园奖助贷一体化服务系统
  • 英国供应链求职机构榜单:供应链机构深度测评 - 技研备忘录
  • 蠕动泵选哪个品牌?国内外优质品牌及选型指南 - 品牌推荐大师1
  • 2026年比较好的底部抽洗脸巾设备/洗脸巾设备厂家选购完整指南 - 行业平台推荐
  • 选购奢侈品回收服务,芯动中古名品性价比高的选择 - mypinpai
  • 探索六轴EtherCAT总线伺服涂布收卷机程序的奇妙世界
  • 扭转试验机选购全指南:如何兼顾价格、质量与耐用性? - 品牌推荐大师1
  • 开题报告 springboot和vue-保洁管理系统
  • 云南环保市政路灯推荐,正翔照明这类靠谱商家值得信赖不? - 工业品牌热点
  • 【技术管理的第一次转身】从问题感知到方案落地
  • 2026年热门的节流微型阀/电动微型阀高口碑厂家推荐(评价高) - 行业平台推荐
  • 2026年广东9米市政路灯生产厂家Top10,如何选择 - 工业推荐榜
  • 2026年诚信的园区智能巡检,煤矿智能巡检公司选购推荐手册 - 品牌鉴赏师
  • 下载 | Windows Server 2019最新纯净版ISO映像!(集成1月更新、标准版、数据中心版、17763.8281)
  • 分析户外景观亮化灯具加工厂,合作案例多的厂家有哪些 - myqiye
  • 【苹果分级】图像处理的苹果品质自动分级系统设计与实现【含Matlab源码 B7Z027期】
  • 2026年桥梁构件选购 衡水博利好吗及行业排名情况 - 工业品网
  • android 11 app 系统签名
  • 2026年高性价比地质研学景点推荐,国内备受关注的打卡地不要错过 - myqiye
  • 强烈安利! 专科生专属AI论文平台 千笔·专业论文写作工具 VS 万方智搜AI
  • 英国供应链求职咨询榜单:供应链咨询TOP10指南 - 技研备忘录