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

java多线程——运用线程同步解决线程安全问题

前言:

整理下学习笔记,打好基础,daydayup!!!

线程安全

多线程可以同时进行操作,但如果是同时操作一个共享资源的时候,可能会出现业务安全问题。

 示例

小A和小B共用一个账户,如果小A和小B同时取钱,谁能够取走钱?

 在没有线程安全的情况下,小A和小B都能够取走钱,导致金额最终为负数。所以为了解决这一情况,就需要解决线程安全问题

线程同步

线程同步就是解决线程安全的方案

 线程同步的思想

让多个线程先后依次访问共享资源,解决线程安全问题

 线程同步的常见方案

使用加锁的方式。每次只允许一个线程加锁,加锁后才能进入访问,访问完毕后自动解锁,然后其他线程才能再加锁进来

1,同步代码块

作用:把访问共享资源的核心代码给上锁,以次保证线程安全。

格式

synchronized(同步锁){访问共享资源的核心代码
}

原理: 每次只允许一个线程加锁后进入,执行完毕后自动解锁,其他线程才可以进来执行。

示例

:对于当前同时执行的线程来讲,必须是同一个对象执行程序,否则会出想bug。

2,同步方法

作用:把访问共享资源的核心方法给上锁,以此保证线程安全

格式

修饰符synchronized 返回值类型 方法名称(形参列表){操作共享资源的代码
}

 原理:每次只能一个线程进入,执行完毕以后自动解锁,其他线程才可以进来执行

3,Lock锁

Lock是接口,不能直接实例化,可以采用它的实现类ReentrantLock来构建Lock锁对象

格式

private Lock  名称 = new ReentrantLock();方法{
名称.lock();需要加锁的代码名称.unlock();}

示例

总结: 

同步代码块相对灵活,但代码多时,可观性较差;同步方法相对死板,但可观性较好;Lock锁相比前两种方法更加灵活,但操作比前两种更为复杂,可观性较差。整理结束,撒花!!!

相关文章:

java多线程——运用线程同步解决线程安全问题

前言: 整理下学习笔记,打好基础,daydayup!!! 线程安全 多线程可以同时进行操作,但如果是同时操作一个共享资源的时候,可能会出现业务安全问题。 示例: 小A和小B共用一个账户,如果小A和小B同时取…...

Radio Silence for mac 好用的防火墙软件

Radio Silence for Mac是一款功能强大的网络防火墙软件,专为Mac用户设计,旨在保护用户的隐私和网络安全。它具备实时网络监视和控制功能,可以精确显示每个网络连接的状态,让用户轻松掌握网络活动情况。 软件下载:Radio…...

全国青少年软件编程(Python)等级考试一级考试真题2023年9月——持续更新.....

青少年软件编程(Python)等级考试试卷(一级) 分数:100 题数:37 一、单选题(共25题,共50分) 1.下列 Python 语句能够正确输出"学而时习之"五个字的是?( )A.print “学而时习之” B.print “(学而时习之)” C.print (“学而时习之”) D.print (学而时习之) 标…...

TCP通信——端口转发(重点内容)

实现多人群聊 Client(客户端)建立通信 package com.zz.tcp.case1;import java.io.DataOutputStream; import java.io.IOException; import java.io.OutputStream; import java.net.Socket; import java.util.Scanner;public class Client {public static void mai…...

乐乐音乐鸿蒙版-支持krc歌词(动感歌词、翻译和音译歌词)

简介 乐乐音乐主要是基于HarmonyOS开发的音乐播放器,它支持lrc歌词和动感歌词(ksc歌词、krc歌词和hrc歌词等)、多种格式歌词转换器及制作动感歌词、翻译歌词和音译歌词。 开发环境 ArkTS、Stage模型、SDK3.1、 API 9 注:没试过在真机条件下调试。 功…...

批量删除 rabbitmq中随机队列

批量删除 amq.gen–* 随机队列 操作错误产生了无效随机队列,需要批量删除 进入MQ集群中 docker psdocker exec -it c2d28e816894 /bin/bash过滤列出指定amq.gen–队列 # 列出 指定 vhost/qq 以amq.gen开头的所有队列 rabbitmqctl list_queues --vhost / | grep ^…...

docker 数据卷

Docker数据卷是Docker中的一个核心机制,用于实现容器间数据的持久化和共享。它是宿主机上的一个特殊目录,可以供一个或多个容器使用。容器删除时,不会删除其挂载的数据卷,也不会存在类似的垃圾机制对容器存在的数据卷进行处理。 …...

【开发工具】Ubuntu复制CSDN代码多余符号的去除

在Ubuntu中使用CSDN复制的代码时,可能会出现\u200的符号,这个符号会影响代码的编译和运行,因此需要找到一种快速删除这种符号的方法。 通过搜索找到了一种替换为空的删除方式,笔者编写了一个适用于Rust的shell脚本,需要…...

【微服务篇】深入理解微服务注册中心与配置中心

注册中心 设计一个注册中心时,需要关注多个关键方面,以确保其稳定性、可靠性、性能和可扩展性。以下是一些重要的考虑因素: 服务发现机制:注册中心的核心功能是允许服务相互发现。这意味着当一个服务实例启动时,它需…...

数据库安全(redis、couchdb、h2database)CVE复现

redis服务默认端口:6379;我们可以通过端口扫描来判断是否存在该服务。 Redis 是一套开源的使用ANSI C 编写、支持网络、可基于内存亦可持久化的日志型、键值存储数据库,并提供多种语言的API。 Redis 如果在没有开启认证的情况下,…...

道可云元宇宙每日资讯|元宇宙标准化工作组成立大会召开

道可云元宇宙每日简报(2024年3月28日)讯,今日元宇宙新鲜事有: 元宇宙标准化工作组成立大会召开 3月21日,元宇宙标准化工作组成立大会暨第一次全体委员会议在浙江省丽水市青田县召开。元宇宙标准化工作组的建立&#…...

20240322-2-Catboost面试题

Catboost面试题 1. 简单介绍Catboost? CatBoost是一种以对称决策树 为基学习器的GBDT框架,主要为例合理地处理类别型特征,CatBoost是由Categorical和Boosting组成。CatBoost还解决了梯度偏差以及预测偏移的问题,从而减少过拟合的…...

【PSINS工具箱】EKF与UKF滤波

描述 对工具箱SINS/GPS,153例程的修改,将EKF和UKF放在一个文件里面,一次运行可以得到两个滤波的结果。 片段 运行截图 程序完整源代码 在有工具箱的情况下,直接运行此代码,即可得到结果 % 基于PSINS工具箱的IMU数据…...

UOS部署oceanbase

安装docker环境。 镜像可在本文档中下载4.2版本的oceanbase 加载镜像 docker load -i oceanbase_4212_x86_64_20231214.tar.gz注意事项 确保挂载点大于200GLOCAL_IP 部署服务器ipNIC_NAME 部署服务器对应的网络OBCLUSTER_IP_LIST 部署服务器ip 启动容器 sudo docker run …...

Hive查询转换与Hadoop生态系统引擎与优势

目录 摘要一、Hive是什么二、HDFS是什么三、Hive与HDFS的关系四、什么是HiveQL五、什么是mapreduce六、Hive如何将查询转为mapreduce任务七、Hadoop生态系统中的高性能引擎八、使用Hadoop的优点 摘要 Hadoop生态系统中包含了多个关键组件,如Hive、HDFS、MapReduce等…...

WPF上使用MaterialDesign框架---下载与配置

一、介绍: Material Design语言的一些重要功能包括 系统字体Roboto的升级版本 ,同时颜色更鲜艳,动画效果更突出。杜拉特还简要谈到了新框架的一些变化。谷歌的想法是让谷歌平台上的开发者掌握这个新框架,从而让所有应用就有统一的…...

鸿蒙ARKTS--简易的购物网站

目录 一、media 二、string.json文件 三、pages 3.1 登录页面:gouwuPage.ets 3.2 PageResource.ets 3.3 商品页面:shangpinPage.ets 3.4 我的页面:wodePage.ets 3.5 注册页面:zhucePage.ets 3. 购物网站主页面&#xff…...

LabVIEW转动设备故障诊断系统

LabVIEW转动设备故障诊断系统 随着工业自动化技术的不断进步,转动设备在电力、化工、船舶等多个行业中扮演着越来越重要的角色。然而,这些设备在长期运行过程中难免会出现故障,如果不能及时诊断和处理,将会导致生产效率下降&…...

uniapp h5 touch事件踩坑记录

场景:悬浮球功能 当我给悬浮球设置了 position: fixed; 然后监听悬浮球的touch事件,从事件对象中拿到clientY和clientX赋值给悬浮球的left和top属性。当直接赋值后效果应该是这样子: 注意鼠标相对悬浮球的位置,应该就是左上角&a…...

webpack.prod.js(webpack生产环境配置文件)

生产环境:只打包不运行本地服务器 对于在config目录下的webpack.prod.js 1.在根目录下运行 npx webpack --config ./config/webpack.prod.js 2.在package.json文件中配置 "build":"npx webpack --config ./config/webpack.prod.js" const …...

OpenAI面向欧洲部分用户开放网络安全专用模型GPT-5.5-Cyber,应对AI网络威胁

OpenAI推出欧洲专属网络安全模型 5月12日消息,据eWeek报道,OpenAI正式面向欧洲地区的部分用户开放了网络安全专用模型GPT-5.5-Cyber。该模型基于GPT-5.5架构开发,专为经过OpenAI验证的网络安全防御人员打造。 满足网络安全关键任务需求 GPT-5…...

告别单调!用LVGL Button控件打造3种高级交互动效(附完整C代码)

用LVGL Button控件实现高级交互动效的实战指南 在嵌入式设备上打造流畅、生动的用户界面一直是开发者的挑战。LVGL作为轻量级图形库,其Button控件的基础功能虽然简单,但通过巧妙运用样式和动画API,可以实现媲美移动端的高级交互效果。本文将深…...

Redis_7_Streams与高可用集群实战

Redis 7.0 Streams与高可用集群部署实战 从消息队列到分布式架构,全面掌握Redis核心能力 前言 Redis不只是一个缓存数据库。Redis 5.0引入的Streams让它具备了消息队列的能力,Redis 7.0进一步增强了Streams的稳定性和性能。很多团队在用Kafka/RabbitMQ处理消息队列时,其实R…...

5分钟快速上手:qmcdump免费解密QQ音乐文件的终极指南

5分钟快速上手:qmcdump免费解密QQ音乐文件的终极指南 【免费下载链接】qmcdump 一个简单的QQ音乐解码(qmcflac/qmc0/qmc3 转 flac/mp3),仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdump 你是否…...

语言启蒙到底要不要背单词

语言启蒙阶段到底要不要背单词?我更愿意把这个问题换一种问法:这些词是不是能和声音、图像、语境连起来,并且隔几天还能回来一次。 如果只是拿一张词表硬记,入门用户很容易觉得枯燥。可如果完全不接触词汇,后面的听读…...

Maya-glTF插件深度解析:现代3D工作流中的glTF 2.0导出技术内幕

Maya-glTF插件深度解析:现代3D工作流中的glTF 2.0导出技术内幕 【免费下载链接】maya-glTF glTF 2.0 exporter for Autodesk Maya 项目地址: https://gitcode.com/gh_mirrors/ma/maya-glTF 在当今3D内容创作领域,Maya作为行业标准工具&#xff0c…...

别再只把JWT当登录凭证了!从CTFHub靶场看JWT在API安全与数据交换中的‘双刃剑’效应

JWT安全实战:从CTFHub靶场到企业级API防护的深度解析 在数字化身份认证领域,JSON Web Token(JWT)早已超越简单的登录凭证角色,成为现代分布式系统的核心组件。当开发者仅将其视为"带签名的Cookie"时&#xf…...

电子仪器CE标志合规:从技术文件到尽职调查的完整指南

1. CE标志合规:从品牌声誉到技术文件的完整闭环在电子设计与制造领域,无论你开发的是精密的数据采集卡、复杂的信号发生器,还是看似简单的万用表,只要你的产品最终要进入欧洲经济区(EEA)市场,CE…...

大模型评测实战指南:从基准测试到业务落地的科学评估体系

1. 项目概述:为什么我们需要一个“大模型评测”清单?如果你最近也在关注大语言模型(LLM)的发展,可能会和我有一样的感受:兴奋,但也伴随着巨大的信息过载。几乎每天都有新的模型发布,…...

基于 JiuwenClaw AgentTeam 集群模式的年会策划实战:从源码部署到多智能体协作落地

目录 摘要 一、引言:JiuwenClaw AgentTeam 让复杂任务迎刃而解 1.1 为什么选择年会策划作为 AgentTeam 实战场景 1.2 本文实战目标 二、JiuwenClaw 概述 2.1 JiuwenClaw 的核心特性 2.2 JiuwenClaw 的系统架构 2.3 JiuwenClaw 的三种运行模式 2.3.1 规划模…...