Java语言程序设计——篇十七(3)

news2024/11/15 13:32:25

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

       🌿🌿🌿跟随博主脚步,从这里开始→博主主页🌿🌿🌿

  • 欢迎大家:这里是我的学习笔记、总结知识的地方,喜欢的话请三连,有问题可以私信🌳🌳🌳
    您的点赞👍、关注➕、收藏⭐️、评论📝、私信📧是我最大的支持与鼓舞!!!🌻🌻🌻

在这里插入图片描述

并发编程基础

  • 线程同步与对象锁
    • 线程同步与对象锁—方法同步
    • 线程同步与对象锁—块同步
    • 线程同步与对象锁—类锁

线程同步与对象锁

  • 多线程的并发执行可以提高程序的效率,但是,当多个线程同时去访问同一个资源时,这可能引起线程冲突的情况。
  • 计数器Counter类对象,它作为共享数据资源。
  • 当两个操作运行在不同线程中,对同一个数据的两个操作就可能产生冲突。其原因是有些操作看起来是简单操作,但不是原子的, (原子操作:执行过程中,不能被线程调度器中断的操作)虚拟机需要用多个步骤完成。
  • 如表达式:count++;
    1)检索count的当前值。
    2)为检索到的值加1。
    3)增加1后的值存到count中。
  • 对于Counter对象,两个线程A和B。线程A调用increment()方法,同时线程B也调用increment()方法。如果count的初值为0,它们交错的动作可能按下列顺序执行。
    1)线程A:检索count的值0。
    2)线程B:检索count的值0。
    3)线程A:将count加1,count的结果为1。
    4)线程B:将count加1,count的结果为1。
    5)线程A:将结果存回count,count的值为1。
    6)线程B:将结果存回count,count的值为1。
  • 要防止多个线程同时访问同一资源产生冲突,就是防止多个线程同时执行共享对象的方法代码。程序中这样的代码称作临界区(critical section)。
  • 为保证临界区中的代码在一段时间内只被一个线程执行,应在线程开始执行临界区代码时,给临界区加锁, 这样,其他线程在这个临界区被解锁之前,无法执行临界区的代码,在其被解锁之后,其他线程才可以锁定并执行其中的代码。
  • Java的每个对象都有一个内在锁(intrinsic lock),有时也称作监视器锁(monitor lock)。
  • 获得对象的内在锁是能够独占该对象访问权的一种方式。获得对象的内在锁锁定对象是一样的。
  • Java通过同步代码块实现内在锁,Java支持两种同步:
    1)方法同步
    2)块同步

线程同步与对象锁—方法同步

  • 方法同步就是在定义方法时使用synchronized关键字修饰,被修饰的方法为同步方法,具体语法格式如下:
    在这里插入图片描述
  • 被synchronized修饰的方法在某一时刻只允许一个线程访问,访问该方法的其他线程都会发生阻塞,直到当前线程访问完毕后,其他线程才有机会执行该方法。

线程同步与对象锁—块同步

  • 如果使用类库中的类或别人定义的类时,调用的方法没有使用synchronized关键字修饰,又要获得对象锁,可以使用下面的格式:
    在这里插入图片描述
  • lock是一个锁对象,它是同步代码块的关键。当某一个线程执行同步代码块时,其它线程将无法执行当前同步代码块,会发生阻塞,等当前线程执行完同步代码块后,其它的线程开始抢夺执行权,抢到执行权的线程将进入同步代码块,执行其中的代码。循环往复,直到共享资源被处理完为止。
  • 这个过程就好比一个公用电话亭,只有前一个人打完电话出来后,后面的人才可以打。
  • 下面代码利用非线程安全的Counter类作为计数器,为了在计数器递增的时候将计数器对象锁定,incrementCount()方法锁定Counter对象。
    Counter counter = new Counter();
    public void incrementCount(){
          synchronized (counter){  // 锁定counter对象
	      // 执行需要同步的语句
                 counter.increment();
         }
    }

线程同步与对象锁—类锁

  • 每个类也可以有类锁。类锁控制对类的synchronized static代码的访问。请看下面的例子。
    public class SampleClass{
         static int x, y;
         static synchronized void increment(){
            x++;  
            y++;
        }
    }

博主用心写,读者点关注,互动传真情,知识不迷路。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2070669.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

聊聊最近大火的《黑神话·悟空》这款游戏

《黑神话悟空》游戏突然成为是一款备受瞩目的游戏,以下是对该游戏的详细介绍: 一、游戏基本信息 开发团队:游戏科学 游戏类型:动作角色扮演游戏(ARPG)背景设定:以中国四大名著之一《西游记》…

我的创作纪念日——128天

目录 机缘 收获 日常 成就 憧憬 机缘 作为一名计算机专业的大学生,我最初接触编程时,像大多数新手一样,充满了好奇与困惑。那时的我,常常在网上寻找答案,渴望能够找到一条通往编程世界的捷径。在浏览CSDN的过程中…

linux 系统备份与恢复方法及解决方案

😀前言 本篇博文是关于 linux 系统备份与恢复,希望你能够喜欢 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满意是我的动力&#x…

C语言 | Leetcode C语言题解之第367题有效的完全平方数

题目&#xff1a; 题解&#xff1a; bool isPerfectSquare(int num) {long long left0;long long rightnum;while(left<right){long long mid(leftright)/2;long long ansmid*mid;if(ans<num){leftmid1;}else if(ans>num){rightmid-1;}else{return true;}}return…

数据结构——冒泡、选择、插入和希尔排序

目录 引言 冒泡排序 1.算法思想 2.算法步骤 3.代码实现 4.复杂度分析 选择排序 1.算法思想 2.算法步骤 3.代码实现 (1)优化前 (2)优化后 4.复杂度分析 插入排序 1.算法思想 2.算法步骤 3.代码实现 4.复杂度分析 希尔排序 1.算法思想 2.算法步骤 3.代码实…

智能手机摄影综评:品牌联名与自建影像品牌的战略分析

随着智能手机摄影技术的飞速发展&#xff0c;各大厂商不仅与知名摄影品牌展开合作&#xff0c;还通过自建影像品牌来提升产品的摄影能力和品牌形象。本文将重点分析小米、华为、荣耀、OPPO、Vivo和苹果在摄影品牌联名与自建影像品牌方面的战略&#xff0c;探讨这些策略如何影响…

【第78课】数据库安全RedisCouchDBH2database未授权访问CVE漏洞

免责声明 本文发布的工具和脚本&#xff0c;仅用作测试和学习研究&#xff0c;禁止用于商业用途&#xff0c;不能保证其合法性&#xff0c;准确性&#xff0c;完整性和有效性&#xff0c;请根据情况自行判断。 如果任何单位或个人认为该项目的脚本可能涉嫌侵犯其权利&#xff0…

数学基础(七)

一、熵 熵代表物体内部的混乱程度。&#xff08;一件事发生的不确定性&#xff09; 熵应用到分类任务中 二、激活函数 Sigmoid函数&#xff1a; Tanh函数&#xff1a; Relu函数&#xff1a; 三、回归分析 回归分析是寻找存在相关关系的变量间的数学表达式&#xff0c;并进行…

Parallels Desktop 19 for Mac 安装虚拟机需要激活吗

Parallels Desktop 19 for Mac 乃是一款适配于 Mac 的虚拟化软件。它能让您在 Mac 计算机上同时运行多个操作系统。您可借此创建虚拟机&#xff0c;并于其中装设不同的操作系统&#xff0c;如 Windows、Linux 或 macOS。使用 Parallels Desktop 19 mac 版时&#xff0c;您可在 …

商业预付费电能管理解决方案

安科瑞徐赟杰 商业预付费电能管理解决方案 大型商业项目的能源消耗量高&#xff0c;一般为住宅的10-15倍&#xff0c;普通公共建筑的3-5倍。作为商业地产的物业管理层&#xff0c;希望他们的用电费用回收越快越好&#xff0c;更进一步的可能需要一个简单便捷的收集、并清楚显…

5步掌握Python Django结合K-means算法进行豆瓣书籍可视化分析

&#x1f393; 作者&#xff1a;计算机毕设小月哥 | 软件开发专家 &#x1f5a5;️ 简介&#xff1a;8年计算机软件程序开发经验。精通Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等技术栈。 &#x1f6e0;️ 专业服务 &#x1f6e0;️ 需求定制化开发源码提…

MAVEN 3.9.1安装

WIN系统MAVEN 3.9.1安装 1. 下载 下载官网地址&#xff1a;Index of /dist/maven/maven-3 (apache.org) 百度网盘&#xff1a; 通过网盘分享的文件&#xff1a;apache-maven-3.9.1-bin.zip 链接: https://pan.baidu.com/s/1VKmxrU5Hg6mbEUc43wjQUw 提取码: aua6 –来自百度网…

Linux云计算 |【第二阶段】SHELL-DAY1

主要内容&#xff1a; Shell概述&#xff0c;编写及执行脚本、Shell变量&#xff08;自定义变量、环境变量、预定义变量、位置变量&#xff09;、数值运算&#xff08;expr工具、$[]、let、bc&#xff09; 一、Shell概述 Shell 是操作系统提供的一种命令行解释器&#xff0c;…

攻防世界-web题型-9星难度汇总-个人wp

TimeKeeper 2024/03/10 16:18 有两周没有打靶场了&#xff0c;这段时间在准备护网的面试&#xff0c;顺便挖了下edu也是挖到了一些漏洞。 言归正传&#xff0c;看看这道题目。进去是一个shop&#xff0c;先注册一个账号尝试注册admin发现操作失败&#xff0c;尝试登录admin …

Unity+Addressable

前期准备 下载一个hfs本地服务器&#xff0c;打开即可 HFS ~ HTTP 文件服务器 (rejetto.com) 1.安装Addressable插件 创建组 2.使用图片创建预制体 放入Addressable Groups内 3.右键 新建组 创建预制体t拖拽放入新建组里 新组命名为Gameobject 简化名称 4.创建一个测试脚本 …

Python和MATLAB梯度下降导图

&#x1f3af;要点 寻找局部最小值普通最小二乘法和随机梯度下降的动量线性回归媒体广告销售光学字符识别和最小化均方误差男女医疗费用最快速下降方向函数优化等高线图可视化共轭梯度下降可视化损失函数、动量、涅斯特洛夫动量、权衰减量化不确定性拓扑结构算法分类中权重归一…

西安电子高速PCB学习(四)

注意了&#xff0c;信号发生器的不同通路不能并联使用&#xff0c;示波器的信号通路不能并联电源使用&#xff0c;不同信号发生器不能并联使用&#xff1a; 严禁多个电容共用过孔&#xff1a; 多个电容并联时&#xff0c;小容量的电容应更靠近芯片电源引脚&#xff0c;主要原因…

【图像增强】使用 Albumentations Python 库(01)

目录 一、说明 二、Albumentations库 2.1 如何安装 2.2 测试代码示例 2.3 在albumentations库中实现的所有像素级变换 2.4 空间级转换 2.5 混合级别转换 三、让我们看看上述实现中的转换。 3.1 在专辑中实现的天气相关转换 3.2 随机雨 3.3 在相册中处理非 8 位图像 3.4 在文档…

如何优雅的实现CRUD,包含微信小程序,API,HTML的表单(一)

前言 在开发实际项目中&#xff0c;其实CRUD的代码量并不小&#xff0c;最近要做一个小程序项目&#xff0c;由于涉及表单的东西比较多&#xff0c;就萌生了一个想法&#xff0c;小程序的写法不是和VUE类似&#xff0c;就是数据绑定&#xff0c;模块么&#xff01;那就来一个动…

【vue3|第26期】Vue3 中的 useRoute 与 router.currentRoute.value:选择正确的路由访问方式

日期&#xff1a;2024年8月22日 作者&#xff1a;Commas 签名&#xff1a;(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释&#xff1a;如果您觉在这里插入代码片得有所帮助&#xff0c;帮忙点个赞&#xff0c;也可以关注我&#xff0c;我们一起成长&#xff1b;如果有不…