线程安全问题 --- 死锁

news2024/12/23 4:46:06

文章目录

  • 线程安全
    • 产生线程安全问题的原因
    • 上锁
    • synchronized使用方法
      • 1. 修饰方法
      • 2. 修饰代码块
      • synchronized的可重入性
    • 死锁
      • 什么是死锁
      • 死锁的三个典型情况:
      • 死锁的四个必要条件
      • 如何破除(避免)死锁
    • 线程安全类

线程安全

由于多个线程之间是抢占式执行的, 这就给调度执行顺序带来了随机性, 程序员需要在n多个调度执行顺序中保证每一个顺序最后执行的结果都是正确的, 如果其中有一个执行顺序出错, 则视为是出现bug, 即发生了线程安全问题
下面是一个有线程安全问题的代码:

package Thread;
class Add{
   
    int a = 0;
    public void add(){
   
        for(int i = 0 ; i < 50000; i++){
   
            a++;
        }
    }
}
public class ThreadDome11 {
   
    public static void main(String[] args) {
   
        Add a = new Add();
        Thread t1 = new Thread(()->{
   
            a.add();
        });
        Thread t2 = new Thread(()->{
   
            a.add();
        });
        t1.start();
        t2.start();
        try {
   
            t1.join();
            t2.join();
        } catch (InterruptedException e) {
   
            throw new RuntimeException(e);
        }
        System.out.println("最终值为:" + a.a);
    }
}

在这里插入图片描述两个线程各自给a自增五万次, 最后的结果有可能小于, 等于五万, 也有可能大于五万, 等于十万等诸多结果

产生线程安全问题的原因

  1. 多线程之

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

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

相关文章

Redis(三)

文章目录 一、单节点Redis的问题&#xff08;一&#xff09;数据丢失&#xff08;二&#xff09;并发能力问题&#xff08;三&#xff09;存储能力问题&#xff08;四&#xff09;故障恢复问题 二、Redis持久化&#xff08;一&#xff09;RDB1、RDB是什么2、rdb配置3、手动触发…

Java基于SpringBoot的高校招生系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 文章目录 简介系统设计思路1 数据库设计2 系统整体设计 系统详细设计1系统功能模块2. 管理员功能模块3学生…

时序预测 | MATLAB实现ICEEMDAN-IMPA-LSTM时间序列预测

时序预测 | MATLAB实现ICEEMDAN-IMPA-LSTM时间序列预测 目录 时序预测 | MATLAB实现ICEEMDAN-IMPA-LSTM时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 ICEEMDAN-IMPA-LSTM功率/风速预测 基于改进的自适应经验模态分解改进海洋捕食者算法长短期记忆网络时间序…

MQTT协议入门介绍

前言 物联网曾被认为是继计算机、互联网之后&#xff0c;信息技术行业的第三次浪潮。随着基础通讯设施的不断完善&#xff0c;尤其是 5G 的出现&#xff0c;进一步降低了万物互联的门槛和成本。物联网本身也是 AI 和区块链应用很好的落地场景之一&#xff0c;各大云服务商也在…

【漏洞复现】某 NVR 视频存储管理设备远程命令执行

漏洞描述 NUUO NVR是中国台湾NUUO公司旗下的一款网络视频记录器&#xff0c;该设备存在远程命令执行漏洞&#xff0c;攻击者可利用该漏洞执行任意命令&#xff0c;进而获取服务器的权限。 免责声明 技术文章仅供参考&#xff0c;任何个人和组织使用网络应当遵守宪法法律&am…

简单对比一下 C 与 Go 两种语言

使用一个简单的计数程序将古老的 C 语言与现代 Go 进行比较。 Go 是一种现代编程语言&#xff0c;追溯其历史大部分源自编程语言 C。所以&#xff0c;任何熟悉 C 语言的开发者都可能会觉得 Go 很熟悉。C 程序员使用 Go 编写新程序变得容易&#xff0c;同时避免了 C 编程语言的…

安全典型配置(一)使用ACL限制FTP访问权限案例

【微|信|公|众|号&#xff1a;厦门微思网络】 使用ACL限制FTP访问权限案例 ACL简介 访问控制列表ACL&#xff08;Access Control List&#xff09;是由一条或多条规则组成的集合。所谓规则&#xff0c;是指描述报文匹配条件的判断语句&#xff0c;这些条件可以是报文的源地址…

申请免费 SSL 证书为您的小程序加密通信

在今天的网络环境中&#xff0c;数据安全和隐私保护变得尤为重要。无论是网站还是应用程序&#xff0c;为其提供安全的通信渠道都是至关重要的。对于小程序开发者来说&#xff0c;使用 SSL&#xff08;Secure Sockets Layer&#xff09;证书可以有效地保障用户数据的安全&#…

[架构之路-235]:目标系统 - 纵向分层 - 数据库 - 数据库系统基础与概述(快速入门、了解核心概念):概念模型、逻辑模型、物理模型

目录 一、核心概念 1.1 什么是数据与信息 1.2 数据与数据库的关系 1.3 什么是数据库 1.4 数据库中的数据的特点 1.5 数据库与数据结构的关系 1.6 什么是数据库管理系统 1.7 什么是数据库系统 1.8 数据库的主要功能 1.9 Excel表格是数据库吗&#xff1f; 1.10 Excel表…

Asymmetric channel bandwidths(非对称信道带宽)

一人问&#xff1a;“你知道非对称信道带宽&#xff0c;XXX支持吗&#xff1f;”一人答&#xff1a;“我打开XXX的RF应答表看看”。 我默默打开了38.306搜了一下&#xff0c;简单研究了下。 在R15 中&#xff0c;为某些NR band引入了asymmetric Bandwidth UL/DL&#xff0c;以优…

Python机器学习实战-特征重要性分析方法(9):卡方检验(附源码和实现效果)

实现功能 使用chi2()获得每个特征的卡方统计信息。得分越高的特征越有可能独立于目标。 实现代码 from sklearn.feature_selection import chi2 import pandas as pd from sklearn.datasets import load_breast_cancer import matplotlib.pyplot as pltX, y load_breast_ca…

深入浅出的介绍一下虚拟机VMware Workstation——part2(详细安装与使用)

目录 虚拟机概念虚拟机软件安装准备点击创建新的虚拟机&#xff1a;选择要安装的系统镜像文件&#xff08;.iso文件&#xff0c;自己网上找&#xff0c;比如win10的win11的或者mac的系统镜像&#xff09;选择与iso文件对应的系统设置虚拟机名称和位置设置虚拟机基础信息 VMware…

计算机组成与设计的一些概念扫盲

一、术语 超标量架构 早期的单发射架构微处理器的流水线设计目标是做到平均每个时钟周期能执行一条指令&#xff0c;但这一目标不能满足提高处理器性能的要求。为了提高处理器的性能&#xff0c;处理器要具有每个时钟周期发射执行多条指令的能力。超标量体系结构可描述一种微处…

discuz封面设置失败的解决办法(centos系统+windows系统)

discuz封面设置失败的解决办法(centos系统windows系统&#xff09; centos系统&#xff1a;1、开启/var/www/html 这个目录的读写权限chmod -R 777 /var/www/html然后重启httpd&#xff1a;service httpd restart如果discuz论坛发布帖子&#xff0c;还是显示封面设置失败的话…

整理笔记——射频基础知识

一、什么是射频 射频&#xff08;RF&#xff09;&#xff0c;表示可以辐射到空间的电磁频率&#xff0c;频率范围从300kHz&#xff5e;300GHz之间。每秒变化小于1000次的交流电称为低频电流&#xff0c;大于10000次的交流电称为高频电流&#xff0c;射频就是高频交流变化的电磁…

vue,mixins混入

痛点&#xff1a;当我们的项目越来越庞大&#xff0c;项目中的某些组件之间可能会存在一些相似的功能&#xff0c;这就导致了在各个组件中需要编写功能相同的代码段&#xff0c;重复地定义这些相同的属性和方法&#xff0c;导致代码地冗余&#xff0c;还不利于后期代码的维护。…

【芯片设计- RTL 数字逻辑设计入门 5 -- RTL 全加器实现及验证】

文章目录 1.11.1.1 DUT Code1.1.2 Testbench1.1.3 自动化编译:Makefile1.1.4 Debug 方法 1.2 逻辑综合工具 - Design Compile1.2.1 逻辑综合流程1.2.2 逻辑综合方法 1.1 1.1.1 DUT Code 以实现一个全加器为例子, 功能 真值表 验证 功能完整性穷举法代码覆盖率 lab01 编译仿…

哈希应用 : 位图和布隆过滤器

位图 在这里我们可以用一种哈希的新方法 -- 又快又节省内存&#xff08;位图&#xff09; -------------------------------------------------------------------------------------------------------------------------------- 对我们的位进行标记 位图的应用 1.给定100亿…

SVV,PPV算法开发记录

定义 刘大为-血液动力学 Getinge 链接&#xff1a;高级监测参数: SVV, PPV 数据集 计算SVV和PPV使用的动脉血压曲线&#xff0c;在此选用了Kaggle上的Cuff-Less Blood Pressure Estimation数据集&#xff0c;该数据集包含PPG&#xff0c;ABP&#xff0c;ECG三条曲线&…

Godot 脚本外置参数设置

文章目录 添加脚本设置参数bulid 一下 Godot Engine 4.2 简体中文文档 C# exports 添加脚本 设置参数 Godot 添加脚本后&#xff0c;设置参数。两种形式都可以 [Export]public int Speed { get; set; } 10;[Export]public string Name ;bulid 一下 私有变量也可以