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

JUC:线程活跃性(死锁、活锁、饥饿)

文章目录

  • 线程活跃性
    • 死锁
    • 活锁
    • 解饿

线程活跃性

死锁

两个线程相互等待对方已拥有的锁,就会相互一直等待,不会停止。

t1拥有a锁,等待b锁。
t2拥有b锁,等待a锁。

@Slf4j(topic = "c.Test3")
public class st3 {public static void main(String[] args) throws InterruptedException {Object A = new Object();Object B = new Object();Thread t1 = new Thread(() -> {synchronized (A) {log.debug("lock A");try {sleep(1);} catch (InterruptedException e) {e.printStackTrace();}synchronized (B) {log.debug("lock B");log.debug("操作...");}}}, "t1");Thread t2 = new Thread(() -> {synchronized (B) {log.debug("lock B");try {sleep(1);} catch (InterruptedException e) {e.printStackTrace();}synchronized (A) {log.debug("lock A");log.debug("操作...");}}}, "t2");t1.start();t2.start();}
}

活锁

相互改变对方的结束条件,两个线程永远无法结束。

count初始为10,
t1希望count减到0结束。
t2希望count加到20结束。
两个一起同速度执行,一定不能结束。

public class Test3{static volatile int count = 10;static final Object lock = new Object();public static void main(String[] args) {new Thread(() -> {// 期望减到 0 退出循环while (count > 0) {sleep(0.2);count--;log.debug("count: {}", count);}}, "t1").start();new Thread(() -> {// 期望超过 20 退出循环while (count < 20) {sleep(0.2);count++;log.debug("count: {}", count);}}, "t2").start();}
}

可以设置两个线程随机的睡眠时间解决。

解饿

线程一直无法获得cpu的调度,我么就称为线程饥饿。
可能原因为线程优先级太低。

相关文章:

  • Python下载bing每日壁纸并实现win11 壁纸自动切换
  • MySQL详细教程
  • 从头搭建GPT(Andrej Karpathy) 笔记
  • Vue中的MVVM
  • Jenkins磁盘空间批量清理脚本
  • 如何在Windows 10中打开屏幕键盘?这里有详细步骤
  • css的各种样式
  • Axure中后台系统原型模板,B端页面设计实例,高保真高交互54页
  • Flink SQL 基于Update流出现空值无法过滤问题
  • FreeRTOS从代码层面进行原理分析(5 对实时性的探究)
  • Kafka硬核干货
  • macos下 jupyter服务安装和vscode链接密码设置 .ipynb文件
  • 2024年03月CCF-GESP编程能力等级认证C++编程四级真题解析
  • 物联网学习2、MQTT 发布/订阅模式介绍
  • 排序第五篇 归并排序
  • E-HPC支持多队列管理和自动伸缩
  • Flex布局到底解决了什么问题
  • leetcode98. Validate Binary Search Tree
  • PHP的类修饰符与访问修饰符
  • Python连接Oracle
  • vue 个人积累(使用工具,组件)
  • Zsh 开发指南(第十四篇 文件读写)
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 聚类分析——Kmeans
  • 普通函数和构造函数的区别
  • 因为阿里,他们成了“杭漂”
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • %@ page import=%的用法
  • (1)Nginx简介和安装教程
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (2015)JS ES6 必知的十个 特性
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (力扣)循环队列的实现与详解(C语言)
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .apk 成为历史!
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .NET 常见的偏门问题
  • .Net转Java自学之路—SpringMVC框架篇六(异常处理)
  • .so文件(linux系统)
  • /var/spool/postfix/maildrop 下有大量文件
  • @ResponseBody
  • @基于大模型的旅游路线推荐方案
  • [ vulhub漏洞复现篇 ] Celery <4.0 Redis未授权访问+Pickle反序列化利用
  • [AMQP Connection 127.0.0.1:5672] An unexpected connection driver error occured
  • [Android] Upload package to device fails #2720
  • [AUTOSAR][诊断管理][ECU][$37] 请求退出传输。终止数据传输的(上传/下载)
  • [AutoSar]BSW_Com02 PDU详解
  • [BZOJ3223]文艺平衡树
  • [CSS]浮动