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

JavaEE-线程安全专题

文章目录

  • 线程安全概述
    • 线程安全引入
    • 线程不安全原因概述
  • 线程是随机调度的

线程安全概述

线程安全引入

线程安全问题是整个多线程专题的最核心也是最重要的章节, 如果不理解线程的安全, 是无法写出正确的多线程的代码的, 我们之前所写的代码都是在单一的线程环境之下写出的 “玩具式” 的代码, 不存在多线程的复杂关系, 下面我们给出一段代码来引出线程安全的话题…


public class ThreadTest {// 定义一个计数器private static int count = 0;// 定义一个循环的次数private static final int MAX_TIME = 50000;public static void main(String[] args) throws InterruptedException {// 重置计数器countcount = 0;// 创建线程t1Thread t1 = new Thread(() -> {for(int i = 0; i < MAX_TIME; i++){count++;}});// 创建线程t2Thread t2 = new Thread(() -> {for(int i = 0; i < MAX_TIME; i++){count++;}});// 开启线程t1, t2t1.start();t2.start();// main线程等待t1, t2 的执行t1.join();t2.join();System.out.println("运行结果" + count);}
}

我们上述代码想要完成的逻辑是

  • 想通过两个线程把count的值置为10_0000

但是实际上, 运行结果是

在这里插入图片描述
在这里插入图片描述

可以发现, 运行结果跟我们的预期的结果不一致, 这其实就是线程安全问题


线程安全问题:
在多线程环境下, 如果实际运行的结果与预期不一致, 就说明存在线程安全问题, 或者说线程不安全


线程不安全原因概述

  • 线程是并发执行的, 在cpu上的调度的随机的…[根本原因]
  • 多个线程同时修改同一个变量
  • 修改操作不是原子性的
  • 内存可见性问题
  • 指令重排序问题

第一条的关于cpu的调度问题, 我们是没有办法干预的, 因为这是操作系统层面的事情, cpu是随机调度的, 而不是串行执行, 如果是串行执行则不会出现这种线程安全相关的问题
所以我们只能从后四个进行关于线程安全的处理

线程是随机调度的

这是线程安全问题的最根本的原因, 因为我们的程序在cpu上的执行是随机调度的, 所以天然的程序执行就不是连续的, 想要解决这种问题的方法就是, 重写一个操作系统(对线程的调度模式进行重新设计, 这显然是不合理的…)

相关文章:

JavaEE-线程安全专题

文章目录 线程安全概述线程安全引入线程不安全原因概述 线程是随机调度的 线程安全概述 线程安全引入 线程安全问题是整个多线程专题的最核心也是最重要的章节, 如果不理解线程的安全, 是无法写出正确的多线程的代码的, 我们之前所写的代码都是在单一的线程环境之下写出的 “…...

Android 设备使用 Wireshark 工具进行网络抓包

背景 电脑和手机连接同一网络&#xff0c;想使用wireshark抓包工具抓取Android手机网络日志&#xff0c;有以下两种连接方法&#xff1a; Wi-Fi 网络抓包。USB 网络共享抓包。需要USB 数据线将手机连接到电脑&#xff0c;并在开发者模式中启用 USB 网络共享。 查看设备连接信…...

物联网无线局域网WiFi开发(一):WiFi智能家居解决方案

一、WiFi智能家居硬件设计 &#xff08;一&#xff09;WiFi智能家居硬件方案 &#xff08;二&#xff09;硬件选型方案 二、WiFi开发环境搭建 &#xff08;一&#xff09;开发环境搭建 虚拟机lubuntu VirtualBox下载地址&#xff1a;https://www.virtualbox.org/wiki/Downl…...

GMAN解读(论文+代码)

一、注意力机制 注意力机制与传统的卷积神经网络不同的是&#xff0c;前者擅长捕获全局依赖和长程关系&#xff0c;权重会动态调整。而后者对于所有特征都使用同一个卷积核。关于更多注意力机制内容&#xff0c;详见&#xff1a; 注意力机制、自注意力机制、多头注意力机制、通…...

速盾:ddos防御手段哪种比较好?高防cdn怎么样?

DDoS&#xff08;分布式拒绝服务&#xff09;攻击是一种威胁网络安全的常见攻击手段。为了保护网站和服务器免受DDoS攻击的影响&#xff0c;许多安全专家和公司开发了各种防御手段。在这篇文章中&#xff0c;我们将重点讨论一种常见的DDoS防御手段——高防CDN&#xff08;内容分…...

Spring:AOP切入点表达式

对于AOP中切入点表达式&#xff0c;我们总共会学习三个内容&#xff0c;分别是语法格式、通配符和书写技巧。 语法格式 首先我们先要明确两个概念: 切入点:要进行增强的方法切入点表达式:要进行增强的方法的描述方式 对于切入点的描述&#xff0c;我们其实是有两中方式的&a…...

《文件操作》

一 . 文本文件和二进制文件 根据数据的组织形式&#xff0c;数据文件被分为了二进制文件和文本文件 数据在内存中是以二进制的形式存储&#xff0c;如果不加转换的输出到外存的文件中&#xff0c;就是二进制文件。 如果要求在外存上以ASCII 码的形式存储&#xff0c;则需要再存…...

python特殊字符序列

字符 描述 \A 只匹配字符串的开始 \b 匹配一个单词边界 \B 匹配一个单词的非边界 \d 匹配任意十进制数字字符&#xff0c;等价于r&#xff3b;0-9] \D 匹配任意非十进制数字字符&#xff0c;等价于r[^0-9]’ \s 匹配任意空格字符&#xff08;空格符、tab制表符、换…...

卷积神经网络(CNN)中的批量归一化层(Batch Normalization Layer)

批量归一化层&#xff08;BatchNorm层&#xff09;&#xff0c;或简称为批量归一化&#xff08;Batch Normalization&#xff09;&#xff0c;是深度学习中常用的一种技术&#xff0c;旨在加速神经网络的训练并提高收敛速度。 一、基本思想 为了让数据在训练过程中保持同一分布…...

LLaMA-Mesh: Unifying 3D Mesh Generation with Language Models 论文解读

目录 一、概述 二、相关工作 1、LLMs到多模态 2、3D对象生成 3、自回归的Mesh生成 三、LLaMA-Mesh 1、3D表示 2、预训练模型 3、有监督的微调数据集 4、数据集演示 四、实验 1、生成的多样性 2、不同模型text-to-Mesh的比较 3、通用语境的评估 一、概述 该论文首…...

【ESP32CAM+Android+C#上位机】ESP32-CAM在STA或AP模式下基于UDP与手机APP或C#上位机进行视频流/图像传输

前言: 本项目实现ESP32-CAM在STA或AP模式下基于UDP与手机APP或C#上位机进行视频流/图像传输。本项目包含有ESP32源码(arduino)、Android手机APP源码以及C#上位机源码,本文对其工程项目的配置使用进行讲解。实战开发,亲测无误。 AP模式,就是ESP32发出一个WIFI/热点提供给电…...

ESP-KeyBoard:基于 ESP32-S3 的三模客制化机械键盘

概述 在这个充满挑战与机遇的数字化时代&#xff0c;键盘已经成为我们日常学习、工作、娱乐生活必不可少的设备。而在众多键盘中&#xff0c;机械键盘&#xff0c;以其独特的触感、清脆的敲击音和经久耐用的特性&#xff0c;已经成为众多游戏玩家和电子工程师的首选。本文将为…...

28.UE5游戏框架,事件分发器,蓝图接口

3-3 虚幻游戏框架拆解&#xff0c;游戏规则基础_哔哩哔哩_bilibili 目录 1.游戏架构 2.事件分发器 2.1UI控件中的事件分发器 2.2Actor蓝图中的事件分发器 2.2.1动态决定Actor的分发事件 2.2.2父类中定义事件分发器&#xff0c;子类实现事件分发器 2.3组件蓝图中实现事件…...

Puppeteer 和 Cheerio 在 Node.js 中的应用

Puppeteer 和 Cheerio 在 Node.js 中的应用 引言 在现代 Web 开发中&#xff0c;自动化测试、数据抓取和页面分析是常见的需求。Node.js 提供了丰富的工具和库来满足这些需求。本文将介绍两个在 Node.js 中常用的库&#xff1a;Puppeteer 和 Cheerio&#xff0c;它们分别用于…...

Unity2D 关于N方向俯视角 中 角色移动朝向的问题

通常对俯视角2d游戏的角色移动我们使用简单2d混合树的方式,但是其不移动时的朝向该如何定义&#xff1f; 十分简单&#xff1a;移动和不移动之间形成逻辑自锁 详细说明思路就是再创建一个简单2d混合树 定义其N方向的idle 并用lastDirc二维向量保存玩家输入&#xff0c;当玩家输…...

pytorch 和tensorflow loss.item()` 只能用于只有一个元素的张量. 防止显存爆炸

loss.item() 是 PyTorch 中的一个方法&#xff0c;它用于从一个只包含单个元素的张量&#xff08;tensor&#xff09;中提取出该元素的值&#xff0c;并将其转换为一个 Python 标量&#xff08;即 int 或 float 类型&#xff09;。这个方法在训练神经网络时经常用到&#xff0c…...

链表刷题|判断回文结构

题目来自于牛客网&#xff0c;本文章仅记录学习过程的做题理解&#xff0c;便于梳理思路和复习 我做题喜欢先把时间复杂度和空间复杂度放一边&#xff0c;先得有大概的解决方案&#xff0c;最后如果时间或者空间超了再去优化即可。 思路一&#xff1a;要判断是否为回文结构则…...

海盗王集成网关和商城服务端功能golang版

之前用golang把海盗王的商城服务端和网关服务端都重写了一次。 后来在同时开启网关和商城服务时&#xff0c;发现窗口数量有点多&#xff0c;有时要找到商城窗口比较麻烦。 既然2个都是用golang govcl写的&#xff0c;是不是可以集成到一起&#xff0c;方便使用呢&#xff1f;…...

SCI 中科院分区中位于4区,JCR分区位于Q2 是什么水平?

环境&#xff1a; ACM Transactions on Interactive Intelligent Systems 《Acm Transactions On Interactive Intelligent Systems》(《交互式智能系统上的 Acm 事务》)是一本由ASSOC COMPUTING MACHINERY (ACM)出版的Computer Interaction-Computer Science-Human学术刊物&…...

微知-Mellanox网卡的另外一种升级方式mlxup?(mlxup -d xxx -i xxx.bin)

背景 一般升级Mellanox网卡使用flint&#xff0c;还有另外一种叫做mlxup。 NVIDIA 提供了两种固件工具来更新和查询适配器固件&#xff1a; MLXUP - 固件更新和查询实用程序。该实用程序允许扫描服务器计算机以查找可用的 NVIDIA 适配器&#xff0c;并指示每个适配器是否需要…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

Java求职者面试指南:计算机基础与源码原理深度解析

Java求职者面试指南&#xff1a;计算机基础与源码原理深度解析 第一轮提问&#xff1a;基础概念问题 1. 请解释什么是进程和线程的区别&#xff1f; 面试官&#xff1a;进程是程序的一次执行过程&#xff0c;是系统进行资源分配和调度的基本单位&#xff1b;而线程是进程中的…...