当前位置: 首页 > 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锁相比前两种方法更加灵活,但操作比前两种更为复杂,可观性较差。整理结束,撒花!!!

http://www.lryc.cn/news/329166.html

相关文章:

  • Radio Silence for mac 好用的防火墙软件
  • 全国青少年软件编程(Python)等级考试一级考试真题2023年9月——持续更新.....
  • TCP通信——端口转发(重点内容)
  • 乐乐音乐鸿蒙版-支持krc歌词(动感歌词、翻译和音译歌词)
  • 批量删除 rabbitmq中随机队列
  • docker 数据卷
  • 【开发工具】Ubuntu复制CSDN代码多余符号的去除
  • 【微服务篇】深入理解微服务注册中心与配置中心
  • 数据库安全(redis、couchdb、h2database)CVE复现
  • 道可云元宇宙每日资讯|元宇宙标准化工作组成立大会召开
  • 20240322-2-Catboost面试题
  • 【PSINS工具箱】EKF与UKF滤波
  • UOS部署oceanbase
  • Hive查询转换与Hadoop生态系统引擎与优势
  • WPF上使用MaterialDesign框架---下载与配置
  • 鸿蒙ARKTS--简易的购物网站
  • LabVIEW转动设备故障诊断系统
  • uniapp h5 touch事件踩坑记录
  • webpack.prod.js(webpack生产环境配置文件)
  • 利用python做模拟数据(测试数据),连接数据库和服务器接口,涉及雪花id服务
  • 大模型日报2024-03-30
  • 【ARM 嵌入式 C 入门及渐进 14 -- C 代码中取余与取模的使用介绍】
  • C++入门知识详细讲解
  • pytorch中的torch.hub.load():以vggish为例
  • mysql 用户管理-权限管理
  • RabbitMQ--04--发布订阅模式 (fanout)-案例
  • 基于java+SpringBoot+Vue的网上书城管理系统设计与实现
  • PCL点云处理之M估计样本一致性(MSAC)平面拟合(二百三十六)
  • 通过WSL在阿里云上部署Vue项目
  • 240330-大模型资源-使用教程-部署方式-部分笔记