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

news/2024/11/19 22:18:35/文章来源:https://www.cnblogs.com/xswz/p/18555723

前言

本来想着给自己放松一下,刷刷博客,突然被几道面试题难倒!产生死锁的四个必要条件?如何避免死锁?线程池核心线程数怎么设置呢?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 是一个没有大小限制的队列,因此往队列中插入数据的操作(生产者)永远不会被阻塞,而只有获取数据的操作(消费者)才会被阻塞。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/837031.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网卡-国家码

交互大屏、笔记本等产品出口海外,也是网络相关设备,会发出AP热点网络,所以出口海外要符合当地法规。 大屏需要以自带网卡开出本地热点,用于投屏、设备间协同等操作。热点这块受限影响的是信道,每个国家都有雷达信道以及其它军事等受限信道,使用信道时避开这些雷达信道。…

人工智能之机器学习基础——K-Means

K-Means 是一种无监督学习算法,用于将数据划分为 KKK 个簇(Clusters),使得每个簇中的样本尽可能接近其簇中心,簇之间尽可能远离。K-Means 常用于聚类分析,例如客户分群、图像分割等任务。

2643: 鼠鼠的薪水 while

include <bits/stdc++.h> using namespace std; int maxx, a, b, c; int main( ) { cin >> a; b=10; c=3; while(b!=a) { if (c1||c2) { b+=7; } b--; c++; c%=7; maxx++; } cout << maxx; } 反思: while(b<a) 做错,正确为: while(b!=a)

人工智能之机器学习基础——决策树(Decision Tree)

决策树是一种用于分类和回归的非参数模型,能够通过一系列的条件判断(分裂规则)将输入数据划分为子区域,从而完成预测任务。 1. 决策树的基本结构 决策树由以下三部分组成:根节点(Root Node):表示整个数据集,最初没有任何划分。内部节点(Internal Node):表示一个特定…

Vue UI创建项目问题

1.使用cmd命令行【Vue UI】创建项目出现【 Failed to get response from https://registry.npm.taobao.org/vue-cli-version-marker】 原因:镜像问题 处理:npm config get registry查看镜像源是【https://registry.npm.taobao.org/】 替换镜像源:(换成TX的,TaoBao的创建项…

基于Java+Springboot+Jpa+Mysql实现的在线网盘文件分享系统功能设计与实现二

今天发布的是一款由springboot+freemark+jpa+MySQL实现的在线网盘文件分享系统,其功能跟百度网盘非常类似,普通用户可以注册登录,注册后默认分配1G的空间大小,登录进去后可以新建文件夹、上传各种类型的文件、文件移动、复制、下载、删除、分享,分享分为私密分享和公开分享…

『模拟赛』多校A层冲刺NOIP2024模拟赛24

『模拟赛记录』多校A层冲刺NOIP2024模拟赛24Rank 。A. 选取字符串 签。 一眼想到动物园那个题面,kmp 求出的 next 数组实际上就是既是它的后缀又是它的前缀的字符串中(它本身除外),最长的长度。 那么可以想到,某个串除了它自身外,能选的 p/q 最长即为它的 next。更短的可…

osg三维场景中拾取鼠标在模型表面的点击点

osg三维场景中拾取鼠标在模型表面的点击点#include <osg/Group> #include <osg/Geode> #include <osg/ShapeDrawable> #include <osgDB/ReadFile> #include <osgViewer/Viewer> #include <osgGA/GUIEventHandler> #include <osgGA/Trac…

流和向量(Streams and Vectors)

在GNU Radio的官方教程中,提到了两个重要的块连接方式:流和向量(Streams and Vectors)。具体的章节链接为: 🔗:流和向量 - GNU Radio 🔗:带有向量的 Python 块 - GNU Radio 官方文档对流和向量的概念和使用有着简介和直观的讲述,但对于两者之间的转化方法以及何时使…