首页 > 编程语言 >Java面试之多线程&并发篇(6)

Java面试之多线程&并发篇(6)

时间:2024-11-19 22:07:14浏览次数:1  
标签:Java 队列 阻塞 并发 死锁 线程 多线程 CPU

前言

本来想着给自己放松一下,刷刷博客,突然被几道面试题难倒!产生死锁的四个必要条件?如何避免死锁?线程池核心线程数怎么设置呢?Java线程池中队列常用类型有哪些?似乎有点模糊了,那就大概看一下面试题吧。好记性不如烂键盘

*** 12万字的java面试题整理 ***
*** java核心面试知识整理 ***
*** Java高频面试讲解视频(知识涵盖齐全) ***

产生死锁的四个必要条件

  1. 互斥条件:一个资源每次只能被一个线程使用
  2. 请求与保持条件:一个线程因请求资源而阻塞时,对已获得的资源保持不放
  3. 不剥夺条件:进程已经获得的资源,在未使用完之前,不能强行剥夺
  4. 循环等待条件:若干线程之间形成一种头尾相接的循环等待资源关系

如何避免死锁?

指定获取锁的顺序,举例如下:

  1. 比如某个线程只有获得A锁和B锁才能对某资源进行操作,在多线程条件下,如何避免死锁?
  2. 获得锁的顺序是一定的,比如规定,只有获得A锁的线程才有资格获取B锁,按顺序获取锁就可以避免死锁!!!

线程池核心线程数怎么设置呢?

分为CPU密集型和IO密集型
CPU
这种任务消耗的主要是 CPU 资源,可以将线程数设置为 N(CPU 核心数)+1,比 CPU 核心数多出来的一个线程是为了防止线程偶发的缺页中断,或者其它原因导致的任务暂停而带来的影响。一旦任务暂停,CPU 就会处于空闲状态,而在这种情况下多出来的一个线程就可以充分利用 CPU 的空闲时间。

IO密集型
这种任务应用起来,系统会用大部分的时间来处理 I/O 交互,而线程在处理 I/O 的时间段内不会占用 CPU 来处理,这时就可以将 CPU 交出给其它线程使用。因此在 I/O 密集型任务的应用中,我们可以多配置一些线程,具体的计算方法是 : 核心线程数=CPU核心数量*2。

Java线程池中队列常用类型有哪些?

  • ArrayBlockingQueue 是一个基于数组结构的有界阻塞队列,此队列按 FIFO(先进先出)原则对元素进行排序。
  • LinkedBlockingQueue 一个基于链表结构的阻塞队列,此队列按FIFO (先进先出) 排序元素,吞吐量通常要高于 ArrayBlockingQueue 。
  • SynchronousQueue 一个不存储元素的阻塞队列。
  • PriorityBlockingQueue 一个具有优先级的无限阻塞队列。 PriorityBlockingQueue 也是基于最小二叉堆实现
  • DelayQueue只有当其指定的延迟时间到了,才能够从队列中获取到该元素。DelayQueue 是一个没有大小限制的队列,因此往队列中插入数据的操作(生产者)永远不会被阻塞,而只有获取数据的操作(消费者)才会被阻塞。

这里能说出前三种也就差不多了,如果能说全那是最好。

标签:Java,队列,阻塞,并发,死锁,线程,多线程,CPU
From: https://www.cnblogs.com/xswz/p/18555723

相关文章

  • Java OOM原因与应对
    一、引言在Java开发的世界里,内存管理是一个至关重要的环节。Java虽然有着自动内存管理机制(通过垃圾回收器,即GC来回收不再使用的对象所占用的内存),但这并不意味着开发者可以高枕无忧,内存溢出(OutOfMemory,简称OOM)问题依然可能悄然降临,给应用程序带来严重的影响,甚至导致系......
  • Java 反射:解锁 Java 世界的 “隐藏技能”
    一、引言在Java开发的广袤天地中,存在着一种犹如魔法般的技术——Java反射。它就像是一把隐藏的钥匙,能够打开Java类与对象内部那些平时看似难以触及的“暗格”,让开发者在运行时去动态地获取类的信息、操作对象的属性以及调用对象的方法等。无论是构建灵活的框架、实现......
  • Java序列化
    在Java的世界中,序列化是一个不可或缺的概念,它允许我们将对象的状态保存到文件中,或者通过网络传输到其他JVM实例。作为一名Java技术专家和架构师,深入理解序列化机制对于构建高效、可靠的系统至关重要。本文将带你从基础到高级,全面掌握Java序列化。Java序列化基础什么是序列化......
  • 前端必知必会-JavaScript 迭代器
    文章目录JavaScript可迭代对象ForOf循环迭代对字符串进行迭代遍历数组遍历集合在Map上进行迭代JavaScript迭代器自制可迭代对象总结JavaScript可迭代对象可迭代对象是可迭代对象(如数组)。可以使用简单高效的代码访问可迭代对象。可以使用for…of循环对可......
  • 基于Java+Springboot+Jpa+Mysql实现的在线网盘文件分享系统功能设计与实现一
    一、前言介绍:免费学习:猿来入此1.1项目摘要在线网盘文件分享系统的课题背景主要源于现代社会对数字化信息存储和共享需求的日益增长。随着互联网的普及和技术的快速发展,人们越来越依赖电子设备来存储和传输各种类型的数据文件。然而,传统的本地存储方式存在诸多不便,如空间有限、......
  • Java八股-Spring三级缓存,自动装配原理
    文章目录Spring的Bean生命周期Spring三级缓存循环依赖的解决过程结论Q&AQ:二级缓存是否是多余的?上面这个图只有一级缓存和三级缓存也能解决循环依赖,还能解决代理对象的问题了Q:光有一级缓存能不能解决@Autowire级别的循环依赖问题?Q:光有一级缓存和二级缓存,能不能解决@Aut......
  • 基于Java+Springboot+Jpa+Mysql实现的在线网盘文件分享系统功能设计与实现二
    一、前言介绍:免费学习:猿来入此1.1项目摘要在线网盘文件分享系统的课题背景主要源于现代社会对数字化信息存储和共享需求的日益增长。随着互联网的普及和技术的快速发展,人们越来越依赖电子设备来存储和传输各种类型的数据文件。然而,传统的本地存储方式存在诸多不便,如空间有限、......
  • 2025最新-计算机毕业设计Java基于kubenetes的OpenStack私有云平台部署
    一、项目介绍  基于K8S的opoenstack私有云平台的监测系统通过对Web应用服务器运行情况的分析统计系统的建设以实现服务器运行数据监控与分析功能。私有云平台是web应用正常运行的核心,为了确保这些网站的稳定运行,势必需要做好对网站服务器的监控。做好对服务器运行的各......
  • JAVA反序列化学习-CommonsCollections6(基于ysoserial)
    环境准备JDK1.8(8u421)我以本地的JDK8版本为准、commons-collections(3.x4.x均可这里使用3.2版本)cc3.2:<dependency><groupId>commons-collections</groupId><artifactId>commons-collections</artifactId><version>3.2</version>&l......
  • java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,
    @目录一、记录文件相关操作方法二、代码1.读取路径返回List<File>2.读取路径返回List<String>3.删除文件夹4.删除文件一、记录文件相关操作方法二、代码1.读取路径返回List<File>importorg.slf4j.LoggerFactory;importorg.slf4j.Logger;importjava.io.File;importjav......