Java线程面试题

news2024/11/17 5:23:38

0. Java线程面试题

0.1 线程占用的内存

  • JDK1.4默认单个线程占用256K
  • JDK1.5默认单个线程占用1M
  • 可以通过-Xss参数设定

0.2 为什么要使用线程池

  • 手动创建线程池的缺点
    • 不受风险控制:服务器CPU资源有限,如果每个人都显示手动创建线程,不知道哪里的代码出现了多线程,在运行的时候所有线程都在抢占资源,不好控制
    • 频繁创建,开销大
    • 不好管理:可能无限制新建线程,可能占用过多系统资源导致死机或OOM。而重用存在的线程,减少对象创建、消亡的开销,性能佳
  • 线程池优点
    • 降低系统资源消耗,通过重用已存在的线程,降低线程创建和销毁造成的消耗
    • 提高系统响应速度,当有任务到达时,通过复用已存在的线程,无需等待新线程的创建便能立即执行
    • 方便线程并发数的管控

1. 线程的状态

1.1 线程状态枚举

  • NEW

线程被构建,还未start

  • RUNNABLE

运行状态

  • BLOCKED

阻塞状态,阻塞于锁

  • WAITING

等待状态

  • TIME_WAITING

超时等待状态,超过时间自行返回

  • TERMINATED

终止状态,表示线程执行完毕

1.2 线程状态转换图

线程状态转换

2. 守护线程和线程优先级

2.1 守护线程

JVM中不存在非守护线程时,JVM会退出

2.2 线程的优先级

创建线程的时候可以给线程设置优先级,优先级高的线程有更高的概率分配到更多的时间片(不绝对)

3. 线程中断

可以理解为Thread有个interrupted标识符,默认为false,表示一个线程是否被其他线程进行了中断操作

public void interrupt();//将Thread的表示符设为false
public void isInterrupted();//返回标识符
public static isInterrupted();//返回标识符,并设为false

复制

如果线程抛出InterruptedException,那么在抛出InterruptedException之前,JVM会先将标识符设为false,然后再抛出

4. 线程间通信

4.1 通过volatile和synchronized

4.2 等待/通知机制

  • sleep()

当前线程进入TIME_WAITING状态,不会释放锁,但会释放CPU资源

一段时间后苏醒,回到RUNNABLE状态

  • yield()

当前线程由RUNNING状态变为READY状态,不会释放锁,但会释放CPU资源

  • wait(),notify(),nitifyAll()
  • 使用wait(),notify(),nitofyAll()时需要对调用对象加锁(必须在同步代码块内)
  • 当前线程调用某个加锁对象的wait()后,会进入该对象的monitor对象的等待队列中,释放锁,释放CPU资源状态变为WAITING
  • 当前线程调用某个加锁对象的notify()或nitifyAll(),等待队列中的线程从等待队列中移动到同步队列中,线程状态由WAITING变为BLOKING
等待队列中的线程要想从wait()中返回,除了需要有其他线程调用notify()外,还需要等待线程释放锁,获得对象的锁后才能从wait()返回

复制

14

  • join()

注意,wait()是Object的,join()是Thread的

join()中底层调用的wait()

若调用了thread2.join()

就是让当前线程进入thread2的monitor对象的等待队列中,知道thread2结束才会被唤醒

由于底层调用的是wait(),所以会释放锁,但注意释放的是thread2的锁

4.3 等待/通知规范

  • 等待方伪代码
  synchronized(对象){
  	while(条件不满足){
  		对象.wait();
  	}
  	对应的处理逻辑
  }

复制

  • 通知方伪代码
  synchronized(对象){
  	改变条件
  	对象.nitify();
  }

复制

5. 创建线程的方式

1. 继承Thread

2. 实现Runnable接口/利用匿名对象/lambda表达式

3. 实现Callable接口

4. FutureTask(可以由调用线程执行其run(),也可以作为任务提交给线程池)

5. 定时器

6. Stream的parallelStream

7. 线程池隐性创建

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Office远程代码执行漏洞(CVE-2017-11882)漏洞复现

Office远程代码执行漏洞(CVE-2017-11882)漏洞复现 1.漏洞原理2.在Kali平台查看漏洞利用文件3.登录目标靶机,打开FTP服务器4.登录Kali,利用FTP服务器上传payload-cale.doc文件5.登录目标靶机,触发doc文件,验…

虚函数,抽象基类

编译器处理虚函数的方法: 给每个对象添加一个隐藏成员,隐藏成员保存了一个指向函数地址的数组指针,数组被称为虚函数表,虚函数表存储了为类对象声明的虚函数的地址,比如基类包含一个指针,该指针指向基类中…

阿里巴巴变革,盒马“一马当先”

配图来自canva可画 随着数字经济成为当前经济社会发展的“新宠”,诸多数字企业也开始走上了发展的快车道。而作为国内互联网大厂的阿里巴巴集团,为了打造数字经济时代的商业、金融、物流、云计算和大数据等新一代商业基础设施,就于前不久启动…

Javawed第一章:Web前端的入门理论

目录 前言 一.wed 💖wed是什么? 💖 wed的分类 二.HTML 和 CSS 💖HTML的介绍 HTML的标签 💖CSS的介绍 常用基本标签 💖实践 HTML结构标签特点 三.JavaScript 💖JavaScript的介绍 &…

SOLIDWORKS仿真数据清扫工具

我们来聊下SOLIDWORKS仿真数据清扫工具。与 SOLIDWORKS 软件一起安装的一个鲜为人知的工具是 Simulation Cleaning Utility。该实用工具可用于在 SOLIDWORKS 零件或装配文件中永远删除任何仿真数据,包括仿真设置和后处理信息。 SOLIDWORKS仿真数据清扫工具工具可以…

阻塞队列(消息队列)

1、阻塞队列 队列是一种先进先出的数据结构。而阻塞队列也是一种特殊的队列,也遵守”先进先出“的原则。 阻塞队列是一种线程安全的的数据结构,并且具有以下特性: 1、队列往进写元素是从队尾插入,队首取出 2、当插入元素的时候…

Python面向对象编程基础知识和示例代码

文章目录 对象(Object)示例代码一 类的成员方法(Method)示例代码二 类和对象(Class and Object):示例代码三 构造方法(Constructor):示例代码四 魔术方法&…

JUC简介

1、JUC介绍 JUC (java.util.concurrent)是在并发编程中使用的工具类,主要包括以下三个 (1)java.util.concurrent (2)java.util.concurrent.atomic 原子性:不可分割。Int i0; i, (3)…

MySQL——函数与约束的讲解

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​ 前言 本章将会讲解MySQL数据库的函数与约束的讲解。 一.函数 函数 是指一段可以直接被另一…

渗透测试面试题汇总

2023年快过去一半了,不知道小伙伴们有没有找到自己心仪的工作呀【doge】,本文总结了常见的安全岗位面试题,方便各位复习。祝各位事业顺利,财运亨通。在网络安全的道路上越走越远! 所有的资料都整理成了PDF&#xff0c…

DCN v1阅读笔记

DCN v1即 Deformable Convolutional Networks。 视觉识别(例如对象检测和语义分割)中的一个关键挑战是如何适应物体尺度、姿态、视角和零件变形中的几何变化或模型几何变换。卷积神经网络(CNN)构建模块中为固定几何结构&#xff1…

神经网络基础

文章目录 一、神经网络基础1.得分函数 f(xi;W,b)1)从输入到输出的映射2)数学表示3)计算方法4)多组权重参数构成了决策边界 2.损失函数 L3.前向传播4.Softmax分类器 梯度下降2.反向传播 一、神经网络基础 回归任务:最终…

软件测试技能,JMeter压力测试教程,JDBC配置连接mysql数据库(十)

前言 使用jmeter压测接口的时候,有时候需要批量造数据,需使用jmeter连数据库造对应的测试数据 或者测试结束后,对测试的数据还原,删掉一些垃圾数据,都会用到连接数据库执行sql的操作 一、JDBC 连接配置 添加配置元…

7-WebApis-2

Web APIs - 2 掌握事件绑定处理和事件对象,完成常见网页交互 事件监听事件类型事件对象拓展知识综合案例 事件监听 以前写的代码都是自动执行的,我们希望一段代码在某个特定的时机才去执行,比如 点击按钮可以弹出警示框比如鼠标经过显示下拉…

通过easyui的filebox上传文件

本篇文章重点分享一下怎么通过easyui的filebox实现文件上传的功能&#xff0c;从前端代码到后端接口都会展示给大家。 1、form表单同步上传 传统的文件上传会把<input type"file" />放到一个<form></form>里&#xff0c;设置form表单的提交方式为…

开源代码分享(5)—配电网重构的启发式算法(附matlab代码)

来源于文献IEEE TRANSACTIONS ON POWER SYSTEMS期刊文献的开源代码。 摘要&#xff1a;本文提出了一种两阶段的启发式计算方法&#xff0c;可以在最小的计算时间内重新配置一个径向分布网络。所有的网络交换机在操作的初始阶段都是关闭的&#xff0c;并提出了一个顺序的开关开闸…

基于SSM+jsp的教学质量评价系统设计与实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

Origin如何绘制三维离散点并拟合曲面?

文章目录 0.引言1.准备数据2.三维离散点参数设置并绘图3.拟合曲面参数设置并绘图 0.引言 在数据统计分析中&#xff0c;有时希望知道一个因变量在两个自变量变化情况下的变化情况&#xff0c;这时可以绘制散点图&#xff0c;观察基础情况&#xff0c;进一步可以拟合散点&#x…

腾讯安全吴石:基于威胁情报构建免疫体系,助力企业稳步迈向智能安全新阶段

6月13日&#xff0c;腾讯安全、腾讯研究院联合IDC、《中国信息安全》杂志社、CIO时代、新基建创新研究院等多家权威机构、媒体共同发起“数字安全免疫力研讨论坛”&#xff0c;聚合产学研各界专家学者探讨数字安全建设新范式。论坛上&#xff0c;腾讯安全联合IDC发布“数字安全…

【物联网】使用RabbitMQ作为MQTT服务端并自定义设备连接权限

文章目录 项目背景一、部署RabbiqMQ二、设备连接鉴权1.开启插件2.修改配置3.连接鉴权4.消息鉴权 总结 项目背景 最近公司启动了一个新的物联网项目&#xff0c;使用MQTT协议与设备通信&#xff0c;在比较了各大MQTT服务后&#xff0c;决定选用开源的RabbitMQ搭建我们的服务端。…