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

Java多线程面试题:描述一下线程安全活跃态问题,竞态条件?

一、线程安全活跃态问题

线程因为某件事情得不到执行

1、活锁

线程没有阻塞,但一直重复执行某个操作,并且失败重试

1)例子

  • 在消息队列中,消费者没有正确ack消息,并且执行过程中报错了,消息会被重复执行,一直失败并重试
  • for循环忘记break
  • 递归忘记写结束条件

2)解决方案

等待随机时间,按照时间轮去重试,到达一定时间退出重试

2、 饥饿

线程因为无法访问所需资源而一直在等待

1)两种情况

  • 线程优先级问题,不合理分配,导致部分线程始终无法获得CPU资源而一直无法执行
    例如,读写锁,读优先,会造成饥饿,写一直在等
  • 一些线程在临界区无限循坏等待资源,让其他线程一直拿不到锁进去临界区,进入了饥饿状态

2)解决方案

  • 保证资源充足(但很多场景下,资源稀缺无法解决)
  • 公平分配资源(使用公平锁,FIFO策略)
  • 避免持有锁的线程长时间执行

3、死锁

多个线程互相等待对方释放锁的过程

二、竞态条件

多个线程同时访问相同资源,如果对资源的访问顺序敏感,就称存在竞态条件

最常见的情况

  • 先检查后执行:检查值的状态,根据这个状态去更新,但期间可能被其它线程修改,导致执行结果出现各种问题
  • 延迟初始化,单例
http://www.lryc.cn/news/19857.html

相关文章:

  • ZZNUOJ_用C语言编写程序实现1193:单科成绩排序(结构体专题)(附完整源码)
  • expect 使用方法
  • Spring AOP详解-Spring官方原版
  • 链表习题精选(持续更新中)
  • 【log】操作类日志处理 与 报错类日志处理logback
  • 百度网盘好友发来的文件手动输入JS选择代码批量保存
  • 【CS224W】(task6)Google的PageRank算法
  • Python安装拓展库及常用的pip命令及其用法
  • 这9道软件测试面试题,就能刷掉90%的软件测试员
  • 【大数据】大数据Hadoop生态圈
  • python读取tif图像+经纬度
  • Kali安装配置vulhub
  • 【进击的算法】动态规划——不同维度的背包问题
  • udiMagic 导入 Excel to Tally ERP Crack
  • Redis实现分页和多条件模糊查询方案
  • 【H5 | CSS | JS】如何实现网页打字机效果?快收下这份超详细指南(附源码)
  • Airbyte,数据集成的未来
  • 00.内容安排
  • FreeRTOS任务基础知识
  • JDBC-API详解、SQL注入演示、连接池
  • C 学习笔记 —— 动态分配内存(malloc)
  • RK3588通用布线设计指南
  • ChatGPT也懂如何设计开发板!?
  • 去了字节跳动,才知道年薪40W的测试居然有这么多?
  • 2023前端面试知识点总结
  • FL StudioV21电脑版水果编曲音乐编辑软件
  • 【数据结构初阶】实现顺序表的简单功能
  • 华为OD机试题,用 Java 解【停车场车辆统计】问题
  • Linux中使用Docker部署Mysql数据库
  • JPDA(远程调试)使用步骤