首页 > 编程语言 >Java多线程面试题:描述一下线程安全活跃态问题,竞态条件?

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

时间:2023-02-24 23:57:07浏览次数:53  
标签:面试题 执行 Java 重试 线程 竞态 多线程 资源

一、线程安全活跃态问题

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

1、活锁

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

1)例子

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

2)解决方案

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

2、 饥饿

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

1)两种情况

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

2)解决方案

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

3、死锁

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

二、竞态条件

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

最常见的情况

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

标签:面试题,执行,Java,重试,线程,竞态,多线程,资源
From: https://www.cnblogs.com/huozhonghun/p/17153560.html

相关文章

  • 【多线程与高并发】- 浅谈volatile
    浅谈volatile目录浅谈volatile简介JMM概述volatile的特性1、可见性举个例子总结2、无法保证原子性举个例子分析使用volatile对原子性测试使用锁的机制总结3、禁止指令重......
  • JAVA保姆式上手教程之入门精通案例
    事务课程目标1、什么是事务2、jdbc如何控制事务3、设置事务的回滚点4、事务的特性ACID5、数据库事务的隔高级别事务理解什么是事务:指逻辑上一组操作,要么同时成功......
  • java中的栈和队列
    一、队列的简单介绍队列是一种遵循先进先出原则的数据结构,一般会有一个对头和一个对尾,只能在对头取出元素,在队尾添加元素。在上边的图中元素4最先进入队列,所以元素4最......
  • Java的安装开发环境
    Java的安装开发环境卸载JDK删除Java的安装目录删除JAVA_HOME删除path下关于Java的目录查看Java-version安装JDK搜索JDK11,找到下载地址同意协议......
  • JAVAWEB-NOTE02-SQL
    目录SQL简介SQL通用语法SQL分类DDL操作数据库操作表navicat连接本地数据库DMLDQL基础查询条件查询分组查询聚合函数分组查询排序查询分页查询SQL简介●英文:Structured......
  • Java面向对象进阶第一天
    面向对象高级第一天static关键字是静态的意思,可以修饰成员变量,也可以修饰成员方法成员变量的分类静态成员变量有static修饰,属于类,与类一起加载,内存中只有一份,可以......
  • java技能项目简历--参考
    1、熟悉常用Java开源框架Spring、SpringMVC、Mybatis等,了解SpringBoot、SpringCloud更佳;2、熟悉Html、Css、JavaScript、jQuery等前端开发技术;3、了解Dubbo、Zookeeper、Na......
  • Java基础
    多态?假设我们有一个Animal类,其中包含一个makeSound()方法。现在我们可以创建多个子类,如Dog和Cat,它们可以继承Animal类并覆盖makeSound()方法,以产生不同的声音。publicc......
  • java 中清理所有特殊字符
    publicstaticStringfilter(Stringstr)throwsPatternSyntaxException{//清除掉所有特殊字符StringregEx="[`_《》!@#$%^&*()+=|{}':;',\[\].<>?!@#¥%……&*()——+......
  • Java学习之异常
    异常exception一般需要程序员管理的异常可以分为两类:Exception(大类):Runnable异常及其子类其他异常运行时异常:RuntimeException及其子类,编译时不会出现异常,运行......