Java并发编程—死锁

news2024/9/22 23:20:42

文章目录

  • 死锁
      • 什么叫做加锁?
      • 死锁代码理解:
      • 如何避免死锁?
  • 资源限制的挑战
      • 什么是资源限制?
      • 资源限制引发的问题?
      • 如何解决资源限制的问题?
      • 在资源限制情况下进行并发编程

——————————————————————————————

死锁

调用非静态的方法需要new一个方法的对象,synchronized(A)表示锁住了变量A;

  1. synchronized不能直接在创建变量的地方进行修饰。
  2. 被锁的变量必须是引用类型。
  3. 锁是有锁住的时间的,下图阴影部分是锁住的时间,代码块执行完了就释放锁。
    在这里插入图片描述

什么叫做加锁?

  1. 现在有两个资源A和B,两个线程t1,t2;t1给资源A加锁后,其他资源无法读和操作资源A,只有t1可以对资源A进行读写;
  2. 锁内部实现的原理也是给资源加了一个标记(约定),加锁的资源其他线程就不能访问了;
  3. cpu给t1分配的时间片结束后去执行其他线程时,锁也不会释放,其他线程依然不能访问资源A。

死锁代码理解:

在这里插入图片描述

  1. t1先进入就绪态,cpu分配时间片给t1,t1锁住A,t1的时间片结束;
  2. cpu分配时间片给t2,t2进入就绪态,t2锁住B,t2想锁住A,无法对A操作,进入等待状态,t2的时间片结束;
  3. cpu分配时间片给t1,t1睡眠时间结束,想锁住B,无法对B操作,进入等待状态,t1的时间片结束;
  4. cpu分配时间片给t2,t2一直等待锁住A,cpu分配时间片给t1,t1一直等待锁住B,因此形成死锁。
    在这里插入图片描述

如何避免死锁?

  1. 避免一个线程同时获取多个锁。
  2. 避免一个线程在锁内同时占用多个资源,尽量保证每个锁只占用一个资源。
  3. 尝试使用定时锁,使用lock.tryLock(timeout)来替代使用内部锁机制。
  4. 对于数据库锁,加锁和解锁必须在一个数据库连接里,否则会出现解锁失败的情况。

资源限制的挑战

cpu产生浪费的时候,如果是要提高性能的话,适合使用多线程,并不是所有情况都适合用多线程

什么是资源限制?

资源限制是指在进行并发编程时,程序的执行速度受限于计算机硬件资源或软件资源。

资源限制引发的问题?

在并发编程中,将代码执行速度加快的原则是将代码中串行执行的部分变成并发执行,但是如果将某段串行的代码改成并发执行,因为资源受限,所以实际上仍然在串行执行,这时候程序不仅不会加快执行,反而会更慢,因为增加了上下文切换和资源调度的时间。

如何解决资源限制的问题?

  • 对于硬件资源限制,可以考虑使用集群并行执行程序。单机—>多机集群
  • 对于软件资源限制,可以考虑使用资源池将资源复用。

在资源限制情况下进行并发编程

如何在资源限制的情况下,让程序执行得更快呢?
==》根据不同的资源限制调整
程序的并发度;
例:下载文件程序依赖于两个资源——带宽和硬盘读写速度。
有数据库操作时,涉及数据库连接数,如果SQL语句执行非常快,而线程的数量比数据库连接数大很多,则某些线程会被阻塞,等待数据库连接。

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

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

相关文章

物联网 (IoT) 为何如此重要?哪些技术让物联网成为了可能?

随着社会的进步和科技的发展,定位技术在技术手段、定位精度、可用性等方面均取得质的飞越,并且逐步从航海、航天、航空、测绘、军事、自然灾害预防等“高大上”的领域逐步渗透社会生活的方方面面,成为人们日常中不可或缺的重要应用——比如人…

[附源码]计算机毕业设计基于SpringBoot的剧本杀管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

用Python画出圣诞树,瞧瞧我这简易版的吧

前言 嗨嗨,大家好,我是小圆 今天来实现一下 用python画出圣诞树 代码 模块 源码.点击领取即可 import turtle as t from turtle import * import random as r import time圣诞树细节以及画布大小 画布大小,背景颜色都可以改,…

数据结构——链表

目录 一、链表概述 二、模拟实现链表 1、结点 2、遍历链表 3、获取链表的长度 4、添加元素 (1)、头插法 (2)、尾插法 (3)、在指定位置插入元素 5、删除元素 (1)、删…

Springboot整合mybatis多数据源

Mybatis中如何配置多数据源 一 什么情况下会用到多数据库? 场景1: 一个商城网站,一个游戏网站,商城网站已经做好,游戏网站正在开发,游戏网站上的很多道具需要用到商城网站的产品数据,这种情况…

[附源码]Python计算机毕业设计Django基于JEE平台springboot技术的订餐系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

wy的leetcode刷题记录_Day57

wy的leetcode刷题记录_Day57 声明 本文章的所有题目信息都来源于leetcode 如有侵权请联系我删掉! 时间:2022-12-1 前言 leetcode 每日一题二叉树 1779. 找到最近的有相同 X 或 Y 坐标的点 701. 二叉搜索树中的插入操作 目录wy的leetcode刷题记录_Day57声明前言1…

多目标Jaya优化算法(Matlab代码实现)

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭:行百里者,半于九十。 📋📋📋本文目录如下:🎁🎁🎁 💥1 概述 多目标 Jaya 算…

CG-FX 风向传感器 聚碳 浅谈工作原理

产品概述 本产品外型小巧轻便,美观坚固,便于携带和组装,风向标形状设计合理,对自然界大气风向具有准确的定位作用。采用聚碳材质,具有防雨、防腐蚀、坚固实用等优点。 功能特点 ◆体积小,重量轻&#xf…

[附源码]Python计算机毕业设计Django绿色生鲜

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

[附源码]JAVA毕业设计酒店管理系统(系统+LW)

[附源码]JAVA毕业设计酒店管理系统(系统LW) 目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术&…

anaconda使用系列教程--3)conda命令详解

管理conda 在任何时候你可以通过在命令后边跟上-help来获得该命令的完整文档。例如,你可以通过如下的命令来学习conda的update命令conda update --help Conda会返回你安装Anaconda软件的版本conda --version 升级当前版本conda update conda 查看当前conda信息cond…

[附源码]计算机毕业设计打印助手平台

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

[附源码]计算机毕业设计基于springboot的旅游景点管理系统的设计与实现

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

JSP+MySQL基于ssm的主题酒店管理系统

以往的主题酒店管理事务处理主要使用的是传统的人工管理方式,这种管理方式存在着管理效率低、操作流程繁琐、保密性差等缺点,长期的人工管理模式会产生大量的文本餐饮预订与文本数据,这对事务的查询、更新以及维护带来不少困难。随着互联网时代的到来,现如今网络的覆盖率已近非…

【WebRTC】QoS 拥塞控制 GCC 理论 Sender Side BWE 或 REMB

介绍 Sender Side Bandwidth Estimation 发送方带宽预估。Sender Side BWE 是新方案,利用的是 RTCP 中的 TransportCC 协议。 Receiver Estimated Maximum Bitrate 接收端预估最大码率。REMB 是旧方案,利用的是 RTCP 中的 REMB 协议。 背景 WebRTC 中…

C++自动定义的成员函数

C自动提供了下面这些成员函数: 默认构造函数,如果没有定义构造函数默认析构函数,如果没有定义复制构造函数,如果没有定义赋值运算符,如果没有定义地址运算符,如果没有定义 另有移动构造函数和移动赋值运算…

业余时间可以做什么副业,什么副业可以赚钱

大家好,我是蝶衣王的小编 现在的年轻人大多是过着朝九晚五的社畜生活,但是朝九晚五就意味着工资可能不是很高,生活压力会比较大,很多人就会想能不能利用业余时间做一些副业呢​?答案当然是可以的 那么,什…

售前工程师工作内幕揭秘:面试实战技巧

售前工程师工作内幕揭秘:面试实战技巧前言一、售前面试问题,基本就下面这些二、售前工程师岗位普遍误区三、售前工程师核心技能四、面试中,主动出击,才是王道五、对行业的了解是做好售前的基础前言 看到网上很多关于售前工程师面…

git分支上的tag

在发布一个版本时,我们通常先在版本库中打一个标签,这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。在…