Java线程面试及答案--面试必看

自然二进制数与格雷码的相互转换 自然二进制数与格雷码两者优势: 自然二进制数的编码方式简单明了,容易理解,在加减运算中能够直接进行,同时十分方便进行一些位运算操作(如移位、取反等)。 格雷码计数时只有一位变化,可有效减少计数器状态的冗余转换,同时在传输数据时能够减小传输错误的概率,此外带权重编码处理更加方便。 在一定程度上自然二进制数与格雷码优缺点基本相反,综上所述,自然二进制数和格雷码各有优劣之处,需要根据具体应用场景选择合适的编码方式。简单来说,在计数器和编码器中,倾向于使用格雷码;而在进行加减运算时,则倾向于使用自然二进制数。 阅读详情

这是博主精心准备的各厂线程面试都可能涉及的问题及答案,接下来让我们一起看看都是些什么问题吧。

1.简述线程的生命周期

线程是一个动态执行的过程,它也有一个从产生到死亡的过程。
生命周期的五种状态
新建(new Thread)

当创建Thread类的一个实例(对象)时,此线程进入新建状态(未被启动)
例如:Thread t1=new Thread();
就绪(runnable)
线程已经被启动,正在等待被分配给CPU时间片,也就是说此时线程正在就绪队列中排队等候得到CPU资源。例如:t1.start();
运行(running)
线程获得CPU资源正在执行任务(run()方法),此时除非此线程自动放弃CPU资源或者有优先级更高的线程进入,线程将一直运行到结束。
死亡(dead)
当线程执行完毕或被其它线程杀死,线程就进入死亡状态,这时线程不可能再进入就绪状态等待执行。
自然终止:正常运行run()方法后终止
异常终止:调用stop()方法让一个线程终止运行
堵塞(blocked)
由于某种原因导致正在运行的线程让出CPU并暂停自己的执行,即进入堵塞状态。
正在睡眠:用sleep(long t) 方法可使线程进入睡眠方式。一个睡眠着的线程在指定的时间过去可进入就绪状态。
正在等待:调用wait()方法。(调用motify()方法回到就绪状态)
被另一个线程所阻塞:调用suspend()方法。(调用resume()方法恢复)

2. Socket通信

(tcp/udp区别及JAVA的实现方式)
TCP——传输控制协议,具有极高的可靠性,保
证数据包按照顺序准确到达,但其也有着很高的额外负担。
UDP——使用者数据元协议,并不能保证
数据包会被成功的送达,也不保证数据包到达的顺序,但其传输速度很快。大多数我们会使用TCP,
偶尔才会动用UDP。

3. Java线程的优先级设置遵循什么原则?

Java线程的优先级设置遵从下述原则:
(1) 线程创建时,子线程继承父线程的优先级
(2) 线程创建后,可在程序中通过调用setPriority( )方法改变线程的优先级
(3) 线程的优先级是1~10之间的正整数,数字越大优先级越高,默认的优先级是居中,即为5。

4. 什么是线程局部变量?

线程局部变量是局限于线程内部的变量,属于线程自身所有,不在多个线程间共享。Java 提供 ThreadLocal 类来支持线程局部变量,是一种实现线程安全的方式。但是在管理环境下(如 web 服务器)使用线程局部变量的时候要特别小心,在这种情况下,工作线程的生命周期比任何应用变量的生命周期都要长。任何线程局部变量一旦在工作完成后没有释放,Java 应用就存在内存泄露的风险。

5.什么是线程安全?

如果你的代码在多线程下执行和在单线程下执行永远都能获得一样的结果,那么你的代码就是线程安全的。

这个问题有值得一提的地方,就是线程安全也是有几个级别的:
1)不可变
像String、Integer、Long这些,都是final类型的类,任何一个线程都改变不了它们的值,要改变除非新创建一个,因此这些不可变对象不需要任何同步手段就可以直接在多线程环境下使用
2)绝对线程安全
不管运行时环境如何,调用者都不需要额外的同步措施。要做到这一点通常需要付出许多额外的代价,Java中标注自己是线程安全的类,实际上绝大多数都不是线程安全的,不过绝对线程安全的类,Java中也有,比方说CopyOnWriteArrayList、CopyOnWriteArraySet
3)相对线程安全
相对线程安全也就是我们通常意义上所说的线程安全,像Vector这种,add、remove方法都是原子操作,不会被打断,但也仅限于此,如果有个线程在遍历某个Vector、有个线程同时在add这个Vector,99%的情况下都会出现ConcurrentModificationException,也就是fail-fast机制。
4)线程非安全
这个就没什么好说的了,ArrayList、LinkedList、HashMap等都是线程非安全的类。

6.HashMap 是线程安全的吗?为什么不是线程安全的?

不是线程安全的。
不安全的原因. resize死循环

7.Java中用到的线程调度算法是什么?

抢占式。
一个线程用完CPU之后,操作系统会根据线程优先级、线程饥饿情况等数据算出一个总的优先级并分配下一个时间片给某个线程执行。

8.在Java中怎么实现多线程?描述线程状态的变化过程

当多个线程访问同一个数据时,容易出现线程安全问题,需要某种方式来确保资源在某一时刻只被一个线程使用。需要让线程同步,保证数据安全线程同步的实现方案: 同步代码块和同步方法,均需要使用synchronized关键字

同步代码块:public void makeWithdrawal(int amt) {
synchronized (acct) {	}
}

同步方法:public synchronized void makeWithdrawal(int amt) { }
线程同步的好处:解决了线程安全问题
线程同步的缺点:性能下降,可能会带来死锁

9.线程安全与非线程安全集合说一下,底层怎么实现的(hashmap,concurrenthashmap)

10. HashMap 的扩容过程

11. HashMap 1.7 与 1.8 的 区别,说明 1.8 做了哪些优化,如何优化的

12. Java中如何获取到线程dump文件

13. 单例模式的线程安全性

14. 在多线程编程里,wait方法的调用方式是怎样的?

15. volatile关键字是否能保证线程安全?

16. 常用的Java多线程启动方式,Executors线程池有几种常用类型?

17. 创建n多个线程,如何保证这些线程同时启动?看清,是“同时”

18. 18. 编写java多线程程序有几种实现方式?

19. 19. Java创建线程后,调用start()方法和run()的区别

20. Java中实现线程通信的三个方法的作用是什么?

21. 进程和线程的区别

由于文章篇幅原因,其他问题小伙伴们可以去百度搜索,度娘哪里都有

喜欢的朋友可以给博主点点赞和关注!

Open3d Qt的环境配置 目前统一使用qt6配置,open3d中可视化功能目前使用vtk代替,语言为c++。 阅读详情

相关推荐

使用STM输出互补SPWM波(三相各差120°)

使用STM32输出SPWM波形(三相各差120°)

hello011102的博客 7373

java创建n个线程,并保证线程同时启动

问题描述:给你n个赛车,让他们都在起跑线上就绪后,同时出发。 解决方案:用一个for循环创建线程对象,同时调用wait()方法,让所有线程等待;直到最后一个线程页准备就绪后,调用notifyAll(),同时启动所有线程。 思路:思路是,来一辆赛车就加上一把锁,并修改对应的操作数,如果没有全 部就绪就等待,并释放锁,直到最后一辆赛车到场后唤醒所有的赛车线程。 代码: /** * n辆赛车,让他们都在起跑线上就绪后,同时出发 */ public class CarCompetion { /

li_w_ch的博客 3751

【STM32】STM32 CANFD外设的几种消息接收过滤模式

在控制器区域网络(CAN)系统中,正确配置消息过滤器对于有效管理网络通信至关重要。特别是在使用Flexible Data-rate Controller Area Network(FDCAN)时,选择合适的过滤器类型可以大大提高网络效率和消息处理速度。

林愿留的博客 6226

java高级面试题

java高级面试题,java面试题大全带答案,线程面试题,java面试宝典2019 1、[请对以下在J2EE中常用的名词进行解释(或简单描述)](http://www.wityx.com/post/172_1_1.html) 2、[socket通信](http://www.wityx.com/post/175_1_1.html) 3、[简述线程的生命周期](http://www.wityx....

qq_36374082的博客 319

OpenWrt国内镜像源一键切换脚本:清华/阿里/中科大源全搞定

本文介绍了OpenWrt国内镜像源一键切换脚本,支持清华、阿里和中科大三大源,自动识别设备架构和系统版本,显著提升软件包安装速度和成功率。脚本包含架构自动识别、版本适配、多源选择和配置备份等功能,适用于x86_64、ramips/mt7621等常见架构,帮助用户解决海外源访问缓慢的问题。

g5h6i的博客 1175

超详细 | 贝叶斯网络基础——有图有真相

Hello,大家好,我是starz。这是本系列的第二篇《概率基础Ⅱ》,虽说是概率基础,但作为过渡,它开始以图为载体 这节的主要内容有: 贝叶斯网络 三种结构 D-划分 贝叶斯球 马尔科夫毯 应用例子 总结 让我们开始吧 :3 贝叶斯网络 概率图模型可笼统分为两类,一是基于无向图的马尔科夫网络: 二是基于有向图的贝叶斯...

qq_41603411的博客 2万+

在Java中怎样实现多线程?Java线程的四种状态

一、在java中怎样实现多线程? extends Thread implement Runnable 方法一:继承 Thread 类,覆盖方法 run(),我们在创建的 Thread 类的子类中重写 run() ,加入线程所要执行的代码即可。 下面是一个例子: public class MyThread extends Thread  ...

weixin_34315189的博客 895

Elsevier投稿避坑指南:Ocean Engineering论文格式要求详解(附Checklist模板)

本文详细解析Elsevier旗下期刊Ocean Engineering的投稿格式要求与常见陷阱,提供实用的Checklist模板。涵盖文章类型确认、作者贡献声明、图表规范、数据声明等关键环节,帮助研究者高效通过格式审查。特别强调LaTeX排版细节、图表分辨率要求及现代伦理声明规范,助力海洋工程领域学者顺利投稿。

weixin_33734785的博客 1493

java多线程同时创建多个文件_创建n多个线程,如何保证这些线程同时启动?看清,是“同时”。...

创建n多个线程,如何保证这些线程同时启动?看清,是“同时”。用一个for循环创建线程对象,同时调用wait()方法,让所有线程等待;直到最后一个线程也准备就绪后,调用notifyAll(), 同时启动所有线程。比如:给你n个赛车,让他们都在起跑线上就绪后,同时出发,Java多线程如何写代码?思路是,来一辆赛车就加上一把锁,并修改对应的操作数,如果没有全部就绪就等待,并释放锁,直到最后一辆赛车到场后...

weixin_29291069的博客 489

黑客渗透测试后门隐藏技术揭秘

本文介绍了在授权渗透测试中隐藏后门文件(muma.exe)的多种技术手段。主要包括:通过WinRAR自解压脚本将后门与正常程序捆绑实现双开;利用系统自动运行目录和注册表实现开机自启;修改文件图标伪装成常用软件;将文件存放在冷门系统目录;设置系统+隐藏双重属性增强隐蔽性。此外还涉及对抗安全软件的加壳(UPX)、免杀(msfvenom编码)技术,以及进程注入、日志清除等运行隐藏方法。所有技术仅限合法授权测试使用,未经授权使用将面临法律责任。

m0_60781580的博客 1040

自动换挡频率计的设计精髓:如何用数字电路优雅地解决量程切换难题

本文深入解析了自动换挡频率计的设计精髓,重点探讨如何利用数字电路优雅解决量程切换难题。通过74系列通用数字集成电路构建智能化的自动量程切换系统,详细介绍了状态检测、决策逻辑和档位执行等核心模块的设计方法,并对比了不同实现方案的优劣,为电子测量领域的工程师提供了实用的硬件设计参考。

weixin_27869497的博客 407

Java面试题基础系列228道(3),查漏补缺

第一篇更新1~20题的答案解析 《c++与java区别_2022年Java面试题基础系列228道(1),快看看哪些你还不会?》 第二篇更新21~50题答案解析 《Java面试题基础系列228道(2),查漏补缺》 本次更新Java 面试题(一)的51~95题答案 51、类 ExampleA 继承 Exception,类 ExampleB 继承ExampleA。 有如下代码片断: try { throw new ExampleB("b") } catch(ExampleA e){ Sy.

weixin_51393513的博客 359

复现《水化硅铝酸钙微结构和性能的分子动力学模拟研究》的分子动力学模拟

本文详细复现了杨军博士论文中关于水化硅铝酸钙(C-A-S-H)凝胶的分子动力学模拟方法。研究内容包括:1)基于11Å Tobermorite构建C-A-S-H分子模型,通过缺陷引入和Al掺杂调节Ca/Si比;2)使用ReaxFF力场模拟交联C-A-S-H的结构与力学性能;3)采用ClayFF力场研究纳米孔道中水和离子传输行为。研究提供了完整的LAMMPS输入脚本、Python分析代码和力场参数设置,为水泥基材料纳米尺度模拟提供可复现的技术方案。

huanghm88的专栏 105

Java面试题目大汇总(附参考答案)

足足准备了长达3个月的面试,终于在上周拿到了阿里的offer! 博主汇总整理了一份我面试之前看的一些Java面试题目,可以说是非常详细! 分享给大家,希望对正在面试Java岗位的朋友有帮助哈~~ (文末附参考答案) Java基础相关面试题目: JDK 和 JRE 有什么区别? == 和 equals 的区别是什么? 两个对象的 hashCode()相同,则 equals()也一定为 true,对吗? final 在 java 中有什么作用? java 中的 Math.round(-1.5)

Java笔记 1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

java 多线程高级面试_Java中高级面试必问之多线程TOP50(含答案)

以下为大家整理了今年一线大厂面试被问频率较高的多线程面试题,由于本人的见识局限性,所以可能不是很全面,也欢迎大家在后面留言补充,谢谢。1、什么是线程?2、什么是线程安全和线程不安全?3、什么是自旋锁?4、什么是Java内存模型?5、什么是CAS?6、什么是乐观锁和悲观锁?7、什么是AQS?8、什么是原子操作?在Java Concurrency API中有哪些原子类(atomic classes)?...

weixin_42664597的博客 115

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Java中高级面试必问之多线程TOP50(含答案)

以下为大家整理了今年一线大厂面试被问频率较高的多线程面试题,由于本人的见识局限性,所以可能不是很全面,也欢迎大家在后面留言补充,谢谢。  1、什么是线程? 2、什么是线程安全和线程不安全? 3、什么是自旋锁? 4、什么是Java内存模型? 5、什么是CAS? 6、什么是乐观锁和悲观锁? 7、什么是AQS? 8、什么是原子操作?在Java Concurrency API中有哪些原...

技术zhai的博客 333

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

2024年金三银四必问的1000道Java面试题及答案整理,线程池面试题

每一章节不仅有面试题库,还有精心准备了思维导图把相关的知识点串起来,使读者能更好地理解相关的知识点,而不是死记硬背,这些才可以通过大厂面试官的面试连环炮。由此可见作者的良苦用心;(img-obaYX9uc-1713013409743)]包含23大Java面试专题,每项专题都有几十道面试题(附题目详解)

2401_84102892的博客 436

阿里P8架构师面试一个月程序员后,针对漏洞整理出这份283页Java核心面试宝典

本文整理了一些面试时面试官必问的知识点,其中包括了有基础知识、Java集合、JVM、多线程并发、spring原理、微服务、Netty 与RPC 、Kafka、日记、设计模式、Java算法、数据库、Zookeeper、分布式缓存、数据结构等等。 由于知识点比较全面,内容比较多,所以我将这些Java面试中的核心知识点汇总整理成了一份文档。文档已经上传到了百度云网盘,文末提供获取方式~ 以下是文档涉及的主要内容: JVM 线程 JVM内存区域 JVM运行时内存 垃圾回收与算法 JAVA 四种引用类

文章中资料均可获取,有需要请添加yunduoa2019即可 175

远程面试阿里、蚂蚁、京东、美团后整理份283页Java核心面试宝典

本文整理了一些面试时面试官必问的知识点,其中包括了有基础知识、Java集合、JVM、多线程并发、spring原理、微服务、Netty 与RPC 、Kafka、日记、设计模式、Java算法、数据库、Zookeeper、分布式缓存、数据结构等等。由于知识点比较全面,内容比较多,所以我将这些Java面试中的核心知识点汇总整理成了一份文档。

stone_tmp的博客 906

283页Java核心面试宝典!面试阿里、蚂蚁、京东、美团后整理份

本文整理了一些面试时面试官必问的知识点,其中包括了有基础知识、Java集合、JVM、多线程并发、spring原理、微服务、Netty 与RPC 、Kafka、日记、设计模式、Java算法、数据库、Zookeeper、分布式缓存、数据结构等等。 由于知识点比较全面,内容比较多,所以我将这些Java面试中的核心知识点汇总整理成了一份文档。文档已经上传到了百度云网盘,文末提供获取方式~ 以下是文档涉及的主要内容: JVM 线程 JVM内存区域 JVM运行时内存 垃圾回收与算法 JAVA 四种引

weixin_48673251的博客 254

经典Java面试题

大家好,我是酱油君。这是互联网技术岗的分享专题,废话少说,进入正题: 每个篇章的最后都有答案的链接,都在这个文章里回答,太长了~所以另外切了子文章(这就是模块和子模块的关系) 以下是网上整理的非常全面的面试题,当然,绝大多数人不可能全部用到,但是都罗列在此,大家可根据自己的情况,选择对应的模块进行阅读。本文和其他面试题最大的区别就是——答案经过校正~ 面试题模块介绍 这份面试题,包含的内容了十九个模块:Java 基础、容器、多线程、反射、对象拷贝、Java Web 模块、异常、网络、设计模式、Spring/

weixin_51115925的博客 1613

2025春招、金三银四最新互联网大厂1000道Java面试题及答案整理

一线互联网公司都比较注重实际的项目中解决问题的能力,另外面试点主要围绕 JVM、多线程相关、基础知识的底层原理、处理高并发的能力。这里也不扯什么面试技巧了,轻松发挥就好,祝大家金三银四季能有个高薪满意的工作!你的支持,我的动力;祝各位前程似锦,offer 不断!!!

m0_69632475的博客 863

远程面试阿里、蚂蚁、京东、美团后整理份283页Java核心面试宝典!

本文整理了一些面试时面试官必问的知识点,其中包括了有基础知识、Java集合、JVM、多线程并发、spring原理、微服务、Netty 与RPC 、Kafka、日记、设计模式、Java算法、数据库、Zookeeper、分布式缓存、数据结构等等。由于知识点比较全面,内容比较多,所以我将这些Java面试中的核心知识点汇总整理成了一份文档。

Java架构师之路的博客 922

Java并发编程面试题(一)

Java并发编程75道面试题及答案 阿里常用Java并发编程面试试题 Java并发编程必懂知识点解析 Java并发编程面试题 Top 50 整理版 投行的15个多线程和并发面试题 ...

大鹏视界U 1811
上一篇: 蚂蚁金服19年面经--来自拿到offer的JAVA大佬分享
下一篇: 项目演练-熔断器Hystrix
Formor_
博客等级 码龄7年 7粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值