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

《Java并发编程实战》第2章-线程安全性

0.概念理解

对象状态:存储在状态变量(例如实例或静态域)中的数据;
线程安全性:当多个线程访问某个类时,这个类始终都能表现出正确的行为,那么就称这个类是线程安全的;
竞态条件:针对一段有多个操作逻辑的代码,不恰当的线程执行时序可能导致不正确的结果的情况;
不变性条件:涉及多个变量时,各个变量之间并不是彼此独立的,而是某个变量的值会对其他变量的值产生约束。

1.什么情况下会面临线程安全性问题?

多个线程需要访问同一组数据,以达到多线程协作的目的时。

2.线程安全性涉及哪些问题?

原子性: 非原子性的操作序列执行结果可能因线程调度执行的顺序不同而得到不一致的结果;
可见性: A线程写入的数据可能不能立即被B线程正确地读取到;
有序性: 程序执行时可能因指令重排并不严格按照代码编写顺序执行(只保证单线程下多次执行结果一致)。

3.要保证线程安全性有哪些工具可用?

sychronized(可见性+原子性),volatile(可见性),显式锁(可见性+原子性),原子变量(可见性+原子性)。

其他需要注意的问题
  • 完全由线程安全类构成的程序不一定是线程安全的,线程安全类中也可以包含非线程安全的类;
  • 只有当类中仅包含自己的状态时,线程安全类才是有意义的;
  • 无状态对象一定是线程安全的;
  • 常见的竞态条件是先检查后执行,通过一个可能失效的观测结果来决定下一步的动作;
  • 要保持状态一致性,就需要在单个原子操作中更新所有相关的状态变量
  • 内置的sychronized锁是可重入的,场景:子类重写父类的sychronized方法并调用父类的方法;
  • 在不变性条件中的每个变量都必须由同一个锁来保护;
  • 多个原子性操作的组合使用需要额外加锁
  • 同步代码的执行时间应当尽可能短,把耗时长的代码剥离出去。

相关文章:

《Java并发编程实战》第2章-线程安全性

0.概念理解 对象状态:存储在状态变量(例如实例或静态域)中的数据; 线程安全性:当多个线程访问某个类时,这个类始终都能表现出正确的行为,那么就称这个类是线程安全的; 竞态条件&…...

二蛋赠书三期:《C#入门经典(第9版)》

文章目录 前言活动规则参与方式本期赠送书籍介绍作者介绍内容简介读者对象获奖名单 结语 前言 大家好!我是二蛋,一个热爱技术、乐于分享的工程师。在过去的几年里,我一直通过各种渠道与大家分享技术知识和经验。我深知,每一位技术…...

Augmented Large Language Models with Parametric Knowledge Guiding

本文是LLM系列文章,针对《Augmented Large Language Models with Parametric Knowledge Guiding》的翻译。 参数知识引导下的增强大型语言模型 摘要1 引言2 相关工作3 LLM的参数化知识引导4 实验5 结论 摘要 大型语言模型(LLM)凭借其令人印…...

Docker启动Mysql容器并进行目录挂载

一、创建挂载目录 mkdir -p 当前层级下创建 mkdir -p mysql/data mkdir -p mysql/conf 进入到conf目录下创建配置文件touch hym.conf 并把配置文件hmy.conf下增加以下内容使用vim hym.conf即可添加(cv进去就行) Esc :wq 保存 [mysqld] skip-name-resolve character_set_…...

力扣刷题(简单篇):两数之和、两数相加、无重复字符的最长子串

坚持就是胜利 一、两数之和 题目链接:https://leetcode.cn/problems/two-sum/ 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应…...

Spark的基础

实训笔记--Spark的基础 Spark的基础一、Spark的诞生背景二、Spark概念2.1 Spark Core2.2. Spark SQL2.3 Spark Streaming2.4 Spark MLlib2.5 Spark GraphX2.6 Spark R 三、Spark的特点3.1 计算快速3.2 易用性3.3 兼容性3.4 通用性 四、Spark的安装部署4.1 Spark的安装部署就是安…...

如何在idea中新建第一个java小程序

如何在idea中新建第一个java小程序 1.打开软件2.新建项目3.找到安装的jdk文件路径4.继续下一步5.创建项目名称并配置项目路径6.点击完成即可。7.在项目文件的src文件夹下创建java类,程序等7.1其他java项目或文件不能运行的原因: 8.新建类并运行程序9.输入…...

AOP全局异常处理

AOP全局异常处理 由于Controller可能接收到来自业务层、数据层、数据库抛出的异常,因此需要使用AOP思想,进行全局异常处理,异常可通过调试获得。 package org.sinian.reggie.common;import lombok.extern.slf4j.Slf4j; import org.springfram…...

一阶低通滤波器滞后补偿算法

一阶低通滤波器的推导过程和双线性变换算法请查看下面文章链接: PLC算法系列之数字低通滤波器(离散化方法:双线性变换)_双线性离散化_RXXW_Dor的博客-CSDN博客PLC信号处理系列之一阶低通(RC)滤波器算法_RXXW_Dor的博客-CSDN博客_rc滤波电路的优缺点1、先看看RC滤波的优缺点…...

JS中Symbol的介绍

1、 引入Symbol类型的背景 ES5 的对象属性名都是字符串,这容易造成属性名冲突的问题 举例: 使用别人的模块/对象, 又想为之添加新的属性,这就容易使得新属性名与原有属性名冲突 2、Symbol类型简介 symbol是一种原始数据类型 其余原始类型: 未定义(undefined) 、…...

封装统一响应结果类和消息枚举类

在开发中,响应结果都需要统一格式,下面给出一个例子,可自行修改。 package com.lili.utils;import com.fasterxml.jackson.annotation.JsonInclude; import com.lili.enums.AppHttpCodeEnum;import java.io.Serializable;/*** author YLi_Ji…...

应广单片机实现红蓝双色爆闪灯

继续进行点灯,今天来点简单的,红蓝双色爆闪灯,上电即可爆闪,红色接pa.3.pa.4,蓝色接pa6.和pa.7,低电平点亮LED灯,想要高电平点亮,或是驱动N管点亮灯,可以稍作修改。端口电平输出0改1&#xff0c…...

深入了解OSI模型:计算机网络的七大层次

目录 OSI模型 物理层 数据链路层 网络层 传输层 会话层 表示层 应用层 OSI模型 OSI模型是一个网络通信的概念模型,用于描述计算机网络中各个不同层次之间的通信和功能。它将网络通信分为七个不同的层次,每个层次负责不同的任务,使得网…...

games101 作业2

题目 光栅化一个三角形 1. 创建三角形的 2 维 bounding box。 2. 遍历此 bounding box 内的所有像素(使用其整数索引)。然后,使用像素中心的屏幕空间坐标来检查中心点是否在三角形内。 3. 如果在内部,则将其位置处的插值深度值 (…...

二叉树链式存储结构

目录 1.二叉树链式存储结构 2.二叉树的遍历 2.1 前、中、后序遍历 2.2 层序遍历 3.二叉树的其他递归问题 3.1 二叉树的结点个数 ​3.2 二叉树的叶子结点个数 3.3 二叉树第k层结点个数 3.4 二叉树的深度 3.5 二叉树查找 3.6 二叉树销毁 4.二叉树的基础OJ题 4.1 单值…...

Claude 使用指南 | 可与GPT-4媲美的语言模型

本文全程干货,让你轻松使用上claude,这也是目前体验cluade的唯一途径!废话不多说,直接上教程,cluade的能力不逊于GPT4,号称是ChatGPT4.0最强竞品。相对Chatgpt来说,Claude不仅是完全免费的&…...

【汇编】微处理器

【汇编】微处理器 文章目录 【汇编】微处理器1、微处理器概念1.1 关键词1.2 分类 2、微处理器结构2.1 寄存器2.2 寄存器&汇编助记符2.3 寄存器组成结构 3、地址空间3.1 存储空间3.1.1 虚拟空间(编程空间)3.1.2 线性空间 3.2 I/O空间 4、工作模式4.1 …...

按键点亮led灯

原理图: K0这个按键按下时,开发板D1这个灯亮,松开,灯灭 代码如下: #include "stm32f4xx.h" void LED_Init(void) {//1.定义一个GPIO外设的结构体变量 GPIO_InitTypeDef GPIO_InitStructure;//RCC_AHB1PeriphClockCmd(RCC_AHB1Pe…...

Java常见面试题

目录 1、mysql并发事务会带来哪些问题,如何解决?2、请详细描述Redis持久化机制?3、简述Redis缓存雪崩和缓存穿透的问题和解决方案?4、RabbitMQ消息丢失及对应解决方案5、什么叫线程安全?举例说明6、举例说明常用的加密…...

笔记1.5:计算机网络体系结构

从功能上描述计算机网络结构 分层结构 每层遵循某个网络协议完成本层功能 基本概念 实体:表示任何可发送或接收信息的硬件或软件进程。 协议是控制两个对等实体进行通信的规则的集合,协议是水平的。 任一层实体需要使用下层服务,遵循本层…...

别再手动录单了!手把手教你用U9C OpenAPI打通钉钉审批流(含完整配置流程)

别再手动录单了!手把手教你用U9C OpenAPI打通钉钉审批流(含完整配置流程) 当财务部的张经理第17次因为手工录入错误被审计部门退回单据时,他摔掉键盘的冲动都有了。这场景在很多企业司空见惯——U9C系统承载着核心业务数据&#…...

无代码玩转OpenClaw:nanobot镜像图形化配置自动化流程

无代码玩转OpenClaw:nanobot镜像图形化配置自动化流程 1. 为什么选择图形化配置OpenClaw 作为一个长期与技术打交道的开发者,我最初接触OpenClaw时也被它的命令行配置方式劝退过。直到发现了nanobot这个超轻量级镜像,才真正体会到"无代…...

Phi-3 Forest Laboratory 数学公式处理:集成MathType逻辑的LaTeX代码生成

Phi-3 Forest Laboratory 数学公式处理:集成MathType逻辑的LaTeX代码生成 你是不是也遇到过这样的场景?写论文或者做笔记时,需要插入一个复杂的数学公式,比如那个让人头疼的“二元二次方程的求根公式”。你打开LaTeX编辑器&#…...

别再被VS2022的C11原子操作坑了!手把手教你正确配置项目属性(附原理图解)

VS2022中C11原子操作的深度解析与实战避坑指南 当你在VS2022中首次尝试使用stdatomic.h编写多线程计数器时,可能会遇到一堵由编译器错误堆砌而成的"高墙"。这些看似晦涩的报错信息背后,隐藏着微软编译器对C11标准支持的独特实现方式。本文将带…...

终极指南:如何快速配置HsMod插件提升炉石传说游戏体验

终极指南:如何快速配置HsMod插件提升炉石传说游戏体验 【免费下载链接】HsMod Hearthstone Modify Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod HsMod是一个基于BepInEx框架开发的炉石传说游戏插件,专为希望提升游…...

RexUniNLU零样本NLU详细步骤:MRC阅读理解任务Schema编写与调用

RexUniNLU零样本NLU详细步骤:MRC阅读理解任务Schema编写与调用 1. 引言:什么是RexUniNLU和MRC任务 如果你正在寻找一个能够理解中文、不需要训练就能直接使用的自然语言处理工具,RexUniNLU可能就是你要找的解决方案。这个基于DeBERTa模型的…...

SeqGPT-560M实现YOLOv8目标检测:智能图像分析实战

SeqGPT-560M实现YOLOv8目标检测:智能图像分析实战 1. 引言 在计算机视觉领域,目标检测一直是个核心且具有挑战性的任务。传统的YOLOv8模型虽然检测速度快、准确率高,但在处理复杂场景时,往往需要额外的语义理解能力来提升检测精…...

Markdown到PowerPoint转换技术:md2pptx的架构创新与工程实践

Markdown到PowerPoint转换技术:md2pptx的架构创新与工程实践 【免费下载链接】md2pptx Markdown To PowerPoint converter 项目地址: https://gitcode.com/gh_mirrors/md/md2pptx 在技术文档创作和演示文稿制作领域,传统工作流存在显著效率瓶颈。…...

Qwen3-0.6B-FP8实操手册:多轮对话记忆机制与上下文控制技巧

Qwen3-0.6B-FP8实操手册:多轮对话记忆机制与上下文控制技巧 1. 引言:为什么你需要关注对话记忆? 想象一下,你跟一个朋友聊天,聊了十分钟后,你问他:“我们刚才说到哪了?”他一脸茫然…...

面向生产的Chatgpt5.4:系统集成、架构模式与成本优化深度拆解

对于计划将顶级AI能力深度集成至自身产品与工作流的团队而言,理解Gemini 3.1 Pro的系统级特性、集成模式与全生命周期成本至关重要。国内开发者可通过RskAi(www.rsk.cn)等聚合平台,以零成本、国内直访的方式完成前期技术验证与原型…...