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

实现线程同步

由于同一进程的多个线程共享同一块存储空间,在带来方便的同时,也带来了访问冲突的问题。Java语言提供了专门机制以解决这种冲突,有效避免了同一个数据对象被多个线程访问造成的这种问题。这套机制就是synchronized关键字。

synchronized语法结构:

synchronized(锁对象){

        同步代码

}

synchronized关键字使用时需要考虑的问题:

        需要对那部分的代码在执行时具有线程互斥的能力(线程互斥:并行变串行)。

        需要对哪些线程中的代码具有互斥能力(通过synchronized锁对象来决定)。

它包括两种用法:synchronized方法和synchronized块。

synchronized方法

通过在方法声明中加入synchronized关键字来声明,语法如下:

public synchronized void accessval(int newVal);

synchronized在方法声明时使用:放在访问控制符(public)之前或之后。这时同一个对象下synchronized方法在多线程中执行时,该方法是同步的,即一次只能有一个线程进入该方法,其他线程要想在此时调用该方法,只能排队等候,当前线程(就是在synchroized方法内部的线程)执行完该方法后,别的线程才能进入。

synchronized块

synchronized方法的缺陷:若将一个大的方法声明为synchronized将会大大影响效率。

Java为我们提供了更好的解决办法,那就是synchronized块。块可以让我们精确地控制到具体地“成员变量”,缩小同步地范围,提高效率。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • SpringMVC的架构有什么优势?——表单和数据校验(四)
  • [Vue3 + TS + Vite] 获取网页选中内容的字符串格式或HTML格式
  • android 添加一个水平线
  • 【ceph】ceph-mon重新选举的情况
  • 开发不认可bug策略
  • 在 Linux 上设置 RAID 阵列的全面指南
  • bash: redi-cli: 未找到命令...
  • Centos系统内磁盘分区
  • Mojo有哪些优势和劣势
  • 亚马逊云科技 Amazon Bedrock 构建 AI 应用体验
  • 批量制作word表格
  • 【游戏引擎之路】登神长阶(七)——x86汇编学习:凡做难事,必有所得
  • uni-app iOS上架相关App store App store connect 云打包有次数限制
  • 【四大高校支持】第四届互联网金融与数字经济国际学术会议(ICIFDE 2024)
  • AJAX是什么?原生语法格式?jQuery提供分装好的AJAX有什么区别?
  • 【347天】每日项目总结系列085(2018.01.18)
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • Android单元测试 - 几个重要问题
  • egg(89)--egg之redis的发布和订阅
  • E-HPC支持多队列管理和自动伸缩
  • es6要点
  • GitUp, 你不可错过的秀外慧中的git工具
  • java 多线程基础, 我觉得还是有必要看看的
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • PAT A1050
  • React组件设计模式(一)
  • SpiderData 2019年2月23日 DApp数据排行榜
  • yii2权限控制rbac之rule详细讲解
  • 机器学习 vs. 深度学习
  • 机器学习学习笔记一
  • 新版博客前端前瞻
  • ​2021半年盘点,不想你错过的重磅新书
  • ​如何防止网络攻击?
  • #QT(一种朴素的计算器实现方法)
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (1)SpringCloud 整合Python
  • (Note)C++中的继承方式
  • (补充):java各种进制、原码、反码、补码和文本、图像、音频在计算机中的存储方式
  • (二)c52学习之旅-简单了解单片机
  • (二)Kafka离线安装 - Zookeeper下载及安装
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (十六)串口UART
  • (四)鸿鹄云架构一服务注册中心
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (转)编辑寄语:因为爱心,所以美丽
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • (转)视频码率,帧率和分辨率的联系与区别
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .Net 6.0--通用帮助类--FileHelper
  • .NET 命令行参数包含应用程序路径吗?
  • .NET 直连SAP HANA数据库