4. 共享模型之管程(4.1 共享带来的问题)

news2024/11/25 12:45:43

4.1 共享带来的问题

      • 1、Java 的体现
      • 2、问题分析
      • 3、临界区
      • 4、竞态条件

1、Java 的体现

两个线程对初始值为 0 的静态变量一个做自增,一个做自减,各做 5000 次,结果是 0 吗?

public class TestCounterUnsafe {
    static int counter = 0;

    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(() -> {
            for (int i = 0; i < 5000; i++) {
                counter++;
            }
        }, "t1");

        Thread t2 = new Thread(() -> {
            for (int i = 0; i < 5000; i++) {
                counter--;
            }
        }, "t2");

        t1.start();
        t2.start();
        t1.join();
        t2.join();
        log.debug("{}",counter);
    }
}

在这里插入图片描述

2、问题分析

以上的结果可能是正数、负数、零。为什么呢?因为 Java 中对静态变量的自增,自减并不是原子操作,从字节码来进行分析

例如对于 i++ 而言(i 为静态变量),实际会产生如下的 JVM 字节码指令:
在这里插入图片描述
多线程下这 8 行代码可能交错运行:

出现负数的情况:
在这里插入图片描述

出现正数的情况:
在这里插入图片描述

3、临界区

  • 一个程序运行多个线程本身是没有问题的
    • 问题出在多个线程访问共享资源
    • 多个线程读共享资源其实也没有问题
  • 在多个线程对共享资源读写操作时发生指令交错,就会出现问题
  • 一段代码块内如果存在对共享资源的多线程读写操作,称这段代码块为临界区

4、竞态条件

多个线程在临界区内执行,由于代码的执行序列不同而导致结果无法预测,称之为发生了竞态条件

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

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

相关文章

Arrays源码

介绍 java.util中的工具类&#xff0c;提供数组相关的常用操作&#xff0c;排序、比较、填充、二分查找等功能 该类还包含一个静态内部类ArrayList&#xff0c;其中add、remove、clear方法都是没有实现的。 常量&变量 /*** The minimum array length below which a para…

测试人总结怎么写?一篇文章详细总结全了!

目录 前言&#xff1a; 总结内容应包括哪些 不可缺少的模板-前期准备 总结过去-用数据来说话 纵向数据 横向数据 展望未来-做好规划 总结亮点 从其他人学到的点 总结弊病 结尾&#xff1a; 前言&#xff1a; 在这一年里&#xff0c;我作为一名测试人员&#xff0c;不断努力…

Tree 树形控件一级菜单没有复选框,子菜单有复选框,如何实现?

<el-dialogtitle"技术职称选择":visible.sync"isShow"width"30%"top"50px":before-close"closeInputSelectedDepDialog"><div class"tree-content"><el-treeclass"filter-tree my-left-tree&…

AMD HD7850 4G显卡刷Bios验真伪(二)

结果就是&#xff1a;开机黑屏&#xff0c;使用HD7850的bios无法识别它… 秉着寻根问底的原则&#xff0c;继续冲浪找线索~ 是的 你猜对了&#xff0c;不出意外的话 就出了意外… 初步断定&#xff0c;这货是7850的阉割版Radeon HD 7850 768SP 1. 首先&#xff0c;尝试在泡泡…

Spring高手之路3——揭秘Spring依赖注入和SpEL表达式

本篇会给大家举出各种Spring属性依赖注入的例子&#xff0c;方便大家理解。 文章目录 1. setter属性注入1.1 使用XML进行setter方法注入1.2 使用Bean注解进行setter方法注入1.3 setter方法注入完整代码示例 2. 构造器注入2.1 使用XML进行构造器注入2.2 使用Bean注解进行构造器属…

面试经历:我为什么选择的测试的?

目录 前言&#xff1a; 判定缺陷间的重复及依赖关系需要开发能力 使用自动化测试工具需要开发能力 黑盒测试偏爱开发能力 说明 白盒测试需要开发能力 安全测试需要开发能力 开发测试工具 前言&#xff1a; 不知不觉已经从事软件测试六年了&#xff0c;从毕业到进入外包公司外…

Android系统的Ashmem匿名共享内存系统分析(5)- 实现共享的原理

声明 其实对于Android系统的Ashmem匿名共享内存系统早就有分析的想法&#xff0c;记得2019年6、7月份Mr.Deng离职期间约定一起对其进行研究的&#xff0c;但因为我个人问题没能实施这个计划&#xff0c;留下些许遗憾…文中参考了很多书籍及博客内容&#xff0c;可能涉及的比较…

SSM 框架

ssm框架是spring MVC &#xff0c;spring和mybatis框架的整合&#xff0c;是标准的MVC模式&#xff0c;将整个系统划分为表现层&#xff0c;controller层&#xff0c;service层&#xff0c;DAO层四层。ssm框架是目前比较主流的Java EE企业级框架&#xff0c;适用于搭建各种大型…

张小飞的Java之路——第四十六章——网络编程基础

写在前面&#xff1a; 视频是什么东西&#xff0c;有看文档精彩吗&#xff1f; 视频是什么东西&#xff0c;有看文档速度快吗&#xff1f; 视频是什么东西&#xff0c;有看文档效率高吗&#xff1f; 诸小亮&#xff1a;关于网络你了解多少&#xff1f; 张小飞&#xff1a…

五月份跳槽了,历经阿里测开岗4轮面试,不出意外,还是被刷了....

大多数情况下&#xff0c;测试员的个人技能成长速度&#xff0c;远远大于公司规模或业务的成长速度。所以&#xff0c;跳槽成为了这个行业里最常见的一个词汇。 前几天&#xff0c;我看到有朋友留言说&#xff0c;他在面试阿里的测试开发工程师的时候&#xff0c;灵魂拷问三小…

Java开发工程师是做什么的?高考结束最重要的专业选择!

各位同学大家好&#xff0c;我是小源&#xff0c;明天就是高考了&#xff0c;对于正常的一个考生来说&#xff0c;专本线的同学已经开始陆陆续续准备看专业。今天&#xff0c;好程序员分享一个专业&#xff0c;他的名字叫做Java开发工程师&#xff0c;不知道同学有没有听说过这…

【Linux学习】多线程——信号量 | 基于环形队列的生产者消费者模型 | 自旋锁 | 读写锁

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《Linux学习》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 目录 一、 信号量1.1 概念1.2 信号量的基本操作1.3 信号量的基本使用接口 二、基于环形队列的生产…

第8章:SpringMVC的文件上传和下载

一、文件上传和下载 1.文件下载 使用ResponseEntity用于控制器方法的返回值类型&#xff0c;该控制器方法的返回值就是响应到浏览器的响应报文。使用ResponseEntity实现下载文件的功能。 ①创建file.html ② 在FileController.java类里面 文件不管是上传还是下载&#xff0…

思科无线AC旁挂并由第三方网关下发业务上网VLAN的案例

在企业网络环境中&#xff0c;思科无线AC&#xff08;Access Controller&#xff09;常用于无线网络的管理和控制。通常情况下&#xff0c;AC会负责分配无线设备的IP地址和VLAN标识&#xff0c;但在某些特定场景下&#xff0c;我们可能需要通过第三方网关来下发业务上网所需的V…

高频Postman接口测试面试题,我面试没通过的原因找到了

目录 一、Postman在工作中使用流程是什么样的&#xff1f; 二、你使用过Postman的哪些功能&#xff1f; 三、Postman如何管理测试环境&#xff1f; 四、Postman如何实现接口关联&#xff1f; 五、Postman参数化有哪几种方式&#xff1f; 六、Postman中全局/环境/集合变量…

Python和PHP相比有什么优势?我来聊聊深入学习的七个关键点

今天要跟大家谈一下一个高中生被Python培训机构坑的真实案例&#xff0c;披着大数据的壳子。这个高中生进去的时候&#xff0c;他们承诺不管什么学历包分配&#xff0c;毕业后直接上岗。这种承诺肯定是不靠谱的&#xff0c;因为基本上只要说出这句话的包分配&#xff0c;都是很…

如何从零开始构建 API ?

假设你请承包商从零开始建造一座房子&#xff0c;你肯定期望他们交付最高质量的房子。他们必须通过检查、遵守安全规范并遵循项目中约定的要求。因为建房子可容不得走捷径。如果承包商经常走捷径&#xff0c;他们的声誉会受到影响&#xff0c;从而失去客户。其实&#xff0c;开…

jmeter-分布式部署之负载机的设置

目录 引言 一、windows下负载机的配置&#xff08;执行机&#xff09; 二、linux下负载机的配置 三、错误总结 写在最后 引言 今天想和大家聊一下关于jmeter分布式部署中负载机的设置问题。作为一个自动化测试工具&#xff0c;jmeter在性能测试方面有着很强的优势&#x…

NLP(3) Text Classification

文章目录 OverviewText classification 的主要任务Topic ClassificationSentiment AnalysisNative Language IdentificationNatural Language Inference 如何构造 Text ClassifierClassification AlgorithmsBias - Variance Balance朴素贝叶斯Logistic RegressionSupport Vecto…

chatgpt赋能python:Python如何倒序输出:一步步教你实现

Python如何倒序输出&#xff1a;一步步教你实现 Python是一种通用编程语言&#xff0c;具有快速开发、易学易用等诸多优点&#xff0c;在大数据、人工智能、科学计算等领域得到广泛应用。其中&#xff0c;倒序输出是Python编程中非常常见的操作。那么&#xff0c;如何在Python…