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

Java -- 互斥锁--死锁--释放锁

目录

1. 互斥锁

1. 基本介绍:

2. 注意事项和细节

2. 死锁

3. 释放锁


1. 互斥锁

1. 基本介绍:

1.1java语言中,引入了对象互斥锁的概念,来保证共享数据操作的完整性

1.2 每个对象都引入了一个可称为“互斥锁”的标记,这个标记用来保证在任一时刻,只能有一个线程访问该对象

1.3 关键字synchronized来与对象的互斥锁联系。当某个对象用synchronized修饰时,表明该对象在任一时刻只能由一个线程访问

1.4 同步的局限性:导致程序的执行效率降低

1.5 同步方法的锁(非静态)可以是this,也可以是其他对象(要求是同一个对象)

1.6 同步方法(静态)的锁为这个类本身 

2. 注意事项和细节

1. 同步方法如果没有使用static修饰:默认锁对象为this

2. 如果方法使用static修饰,默认锁对象:当前类.class

3. 选择同步代码块或同步方法,要求多个线程的锁对象是同一个即可!!


2. 死锁

多个线程占用了对方的锁资源,但不肯相让,导致了死锁,在编程是一定要避免死锁的发生

3. 释放锁

1. 当前线程的同步方法,同步代码块执行结束

2. 当前线程在同步代码块,同步方法中遇到break,return

3. 当前线程在同步代码块,同步方法中出现了未处理的Error或Exception,导致异常结束

4. 当前线程在同步代码块,同步方法中执行了线程对象的wait方法,当前线程暂停,并释放锁

下面的操作不会释放锁:

1. 线程执行同步代码块或同步方法时,程序调用Thread.sleep(),Thread.yield()方法暂停当前线程的执行,不会释放锁

2. 线程执行同步代码块时,其他线程调用了该线程的suspend()方法将该线程挂起,该线程不会释放锁

注意:尽量避免使用syspend 和 resume 来控制线程,方法不推荐使用

http://www.dtcms.com/a/342694.html

相关文章:

  • 机器学习两大核心算法:集成学习与 K-Means 聚类详解
  • 机器学习经典算法总结:K-Means聚类与集成学习(Bagging, Boosting, Stacking)
  • 机器学习核心算法笔记:集成学习与聚类算法
  • QT6(QSpinBox和QDoubleSpinBox)
  • java项目数据脱敏工具类实现
  • 【离线安装】CentOS Linux 7 上离线部署Oracle 19c(已成功安装2次)
  • 【数据可视化-96】使用 Pyecharts 绘制主题河流图(ThemeRiver):步骤与数据组织形式
  • 如何使用 DeepSeek 助力工作​
  • C# 13 与 .NET 9 跨平台开发实战(第一章:开发环境搭建与.NET概述-下篇)
  • 阿里云的centos8 服务器安装MySQL 8.0
  • 【LeetCode 415】—字符串相加算法详解
  • Java学习历程14——制作一款五子棋游戏(4)
  • R 语言科研配色 --- 第 85 期 (附免费下载的配色绘图PPT)
  • 全屋WiFi强电款WiFi6 86面板一站式测试解决方案
  • leetcode 904 水果成篮
  • 从零开始理解 K 均值聚类:原理、实现与应用
  • Grafana侧重可视化,那多数据源告警呢?
  • Linux的奇妙冒险——进程间通信(管道、SystemV IPC)
  • 【实战记录】麒麟服务器操作系统安装KSC-Defender安全中心全指南
  • EagleTrader交易员采访|交易是一场概率游戏
  • 免费DirectX修复工具?游戏运行异常?【图文详解】dll修复工具?D3DX9_43.dll丢失
  • 【科研绘图系列】R语言绘制序列分析图
  • Rust 的流程控制与函数
  • SQL 中 DISTINCT 的全方位指南:从基础用法到性能优化
  • 【51单片机】【protues仿真】基于51单片机温度烟雾控制系统
  • C++项目实战——高性能内存池(一)
  • Redis面试精讲 Day 26:Redis源码分析:事件循环与网络模型
  • docker使用和部署深化学习
  • 深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)第一章知识点问答(21题)
  • 华为AUTOSAR质量目标与开发实践