版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java线程核心试题及详细答案适用场景:Java基础面试、期末考核、后端基础能力自测考试时长:60分钟满分:100分一、单项选择题(共10题,每题3分,共30分)1.在Java中,线程和进程的核心区别说法正确的是()A.进程共享内存资源,线程独立占用内存B.一个进程可以包含多个线程,线程是CPU调度的最小单位C.进程执行开销更小,线程开销更大D.线程拥有独立的地址空间,进程共享地址空间答案:B详细解析:进程是操作系统资源分配的最小单位,线程是CPU调度的最小单位。一个进程内的多个线程共享进程的堆、方法区资源,每个线程独有栈内存。进程创建、销毁开销远大于线程。A、D说法颠倒,C错误。2.以下哪项不是Java线程的生命周期状态()A.新建(NEW)B.就绪(RUNNABLE)C.阻塞(BLOCKED)D.休眠(SLEEP)答案:D3.启动线程的正确方法是()A.调用线程对象的run()方法B.调用线程对象的start()方法C.直接执行run()方法中的代码D.调用init()方法答案:B详细解析:start()方法会向JVM发起线程调度请求,创建新线程、进入就绪状态,等待CPU执行。直接调用run()只是普通的方法调用,不会开启新线程,依旧在当前主线程中执行。Java线程无init()启动方法。4.关于sleep()和wait()方法,说法错误的是()A.sleep()是Thread类方法,wait()是Object类方法B.sleep()不会释放锁,wait()会释放当前持有的锁C.sleep()和wait()都可以被notify()唤醒D.sleep()可在任意场景使用,wait()必须在同步代码块/同步方法中使用答案:C详细解析:sleep()是限时休眠,时间结束后线程自动恢复就绪状态,无法被notify()唤醒;wait()分为限时和无限等待,无限wait()必须通过notify()/notifyAll()唤醒。其余选项均为两者核心区别。5.Java中synchronized关键字的作用是()A.实现线程异步执行B.保证线程安全,实现代码同步、锁竞争机制C.提升线程执行效率D.终止线程运行答案:B详细解析:synchronized是Java内置的同步锁,用于解决多线程并发操作共享资源的数据安全问题,保证同一时间只有一个线程执行同步代码。同步机制会牺牲部分并发效率,无法提升性能,也不具备异步、终止线程的功能。6.以下哪个线程优先级最高()A.Thread.MIN_PRIORITYB.Thread.NORM_PRIORITYC.Thread.MAX_PRIORITYD.优先级默认一致答案:C详细解析:Java线程优先级分为1-10级,MIN_PRIORITY=1(最低),NORM_PRIORITY=5(默认),MAX_PRIORITY=10(最高)。优先级仅为CPU调度参考,不代表绝对执行顺序。7.volatile关键字的核心作用是()A.保证原子性B.保证变量可见性、禁止指令重排C.锁住代码块实现同步D.阻塞线程执行答案:B详细解析:volatile两大核心特性:1.保证多线程间变量内存可见性,避免线程从缓存读取旧数据;2.禁止JVM和CPU指令重排。volatile不保证原子性,也无法实现锁和阻塞效果。8.线程池核心参数中,核心线程数对应的参数是()A.maximumPoolSizeB.corePoolSizeC.keepAliveTimeD.queueCapacity答案:B详细解析:corePoolSize为核心线程数,是线程池常驻线程数量;maximumPoolSize是最大线程数;keepAliveTime是非核心线程空闲存活时间;queueCapacity是任务队列容量。9.能够终止正在运行线程的合理方式是()A.使用stop()方法B.设置自定义标记位,让线程正常退出run方法C.使用destroy()方法D.直接中断JVM进程答案:B详细解析:stop()、destroy()方法已被废弃,强制终止线程会导致资源未释放、数据错乱等问题。实际开发中统一使用自定义布尔标记位或interrupt()中断标记,让线程自主判断、正常退出,是安全优雅的终止方式。10.关于线程死锁,说法正确的是()A.死锁可以由JVM自动解除B.多个线程互相持有对方需要的锁,且互不释放,形成永久阻塞C.单线程一定会产生死锁D.死锁只会出现在无锁代码中答案:B详细解析:死锁产生四大必要条件:互斥、请求与保持、不可剥夺、循环等待。多线程交叉持有锁是最常见死锁场景,JVM无法自动解除死锁,必须手动优化代码规避。单线程不会产生死锁,无锁代码不存在锁竞争,也不会死锁。二、填空题(共5题,每题4分,共20分)1.Java中创建线程的三种常用方式:继承________类、实现________接口、实现Callable接口结合线程池。答案:Thread、Runnable2.线程的join()方法作用是________。答案:等待当前调用join的线程执行完毕,再继续执行当前线程3.解决多线程原子性问题,常用的两种方式是________、________。答案:synchronized同步锁、Lock显式锁(ReentrantLock)4.线程池拒绝策略中,默认策略是________。答案:AbortPolicy(直接抛出异常拒绝任务)5.产生线程死锁的核心条件中,最关键的循环条件是________。答案:循环等待(多个线程互相持有对方所需资源,形成闭环等待)三、简答题(共3题,每题10分,共30分)1.简述Runnable和Callable接口的核心区别?详细答案:(1)返回值不同:Runnable的run()方法无返回值;Callable的call()方法有泛型返回值,可以获取线程执行结果。(2)异常处理不同:Runnable的run()方法无法抛出受检异常,只能内部捕获;Callable的call()方法可以抛出受检异常,可由外层代码捕获处理。(3)使用场景不同:Runnable适用于无返回值的异步任务,可直接配合Thread或线程池使用;Callable必须配合Future、FutureTask或线程池使用,用于获取任务执行结果。2.简述synchronized和ReentrantLock的区别?详细答案:(1)实现方式:synchronized是JVM底层内置锁,原生语法级别实现;ReentrantLock是JDK代码层面实现的显式锁,属于API工具类。(2)锁灵活性:synchronized锁机制固定,无法手动加锁、解锁;ReentrantLock可手动控制lock()加锁、unlock()解锁,支持超时锁、可中断锁。(3)锁特性:两者均为可重入锁;ReentrantLock支持公平锁/非公平锁切换,synchronized默认非公平锁,不支持手动切换。(4)等待唤醒:synchronized依靠wait()、notify()、notifyAll()唤醒线程,效率较低;ReentrantLock可绑定多个Condition,精准唤醒指定线程。(5)性能:JDK1.6之后synchronized引入偏向锁、轻量级锁优化,性能与ReentrantLock基本持平,低并发场景差距极小。3.简述线程池的优势,为什么不推荐手动newThread创建线程?详细答案:手动创建线程的弊端:频繁创建、销毁线程开销极大,浪费系统资源;无统一管理,线程数量不可控,高并发下容易创建大量线程,导致OOM内存溢出、CPU爆满;任务执行无策略,无法复用线程。线程池核心优势:(1)线程复用:统一管理线程,避免频繁创建销毁线程,降低系统开销;(2)资源可控:通过核心线程数、最大线程数限制并发数量,保护系统稳定;(3)任务调度:支持队列缓冲、拒绝策略,适配不同并发场景;(4)统一管理:可监控线程状态、任务执行情况,方便项目维护。四、编程题(共1题,20分)题目:编写代码,实现三个线程交替打印1-100的数字,线程1打印奇数,线程2打印偶数,线程3空轮询等待,保证数字有序输出,线程安全无错乱。解题思路:使用synchronized锁+标记位控制线程执行顺序,通过wait()/notify()实现线程交替唤醒,保证数字有序递增。完整可运行代码+详细注释:java
publicclassThreadPrintDemo{
//共享变量:当前打印数字
privatestaticintnum=1;
//最大打印数值
privatestaticfinalintMAX_NUM=100;
//锁对象
privatestaticfinalObjectLOCK=newObject();
publicstaticvoidmain(String[]args){
//打印奇数线程
newThread(()->{
while(num<=MAX_NUM){
synchronized(LOCK){
//不是奇数则等待
while(num%2==0){
try{
LOCK.wait();
}catch(InterruptedExceptione){
e.printStackTrace();
}
}
if(num<=MAX_NUM){
System.out.println("奇数线程打印:"+num);
num++;
}
//唤醒所有等待线程
LOCK.notifyAll();
}
}
},"奇数线程").start();
//打印偶数线程
newThread(()->{
while(num<=MAX_NUM){
synchronized(LOCK){
//不是偶数则等待
while(num%2!=0){
try{
LOCK.wait();
}catch(InterruptedExceptione){
e.printStackTrace();
}
}
if(num<=MAX_NUM){
System.out.println("偶数线程打印:"+num);
num++;
}
LOCK.notifyAll();
}
}
},"偶数线程").start();
//空等待线程
newThread(()->{
while(num<=MAX_NUM){
synchronized(LOCK){
try{
//持续等待,响应唤醒
LOCK.wait();
}catch(InterruptedExceptione){
e.printStackTrace();
}
}
}
},"空等待线程").start();
}
}代码解析:1.定义全局共享数字变量和统一锁对象,保证多线程竞争同一把锁;2.通过while循环判断数字奇偶性,不满足当前线程打印条件则进入等待,避免虚假唤醒;3.每次打印完成后数字自增,唤醒所有等待线程,切换执行权限
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025食品安全管理员考试试题库卷及解析答案
- 2026版大血管炎诊疗临床实践指南培训试题及答案
- 2026年江苏省苏教版初中七年级语文第3章同步练习题及答案
- 2026年广东省广州市外国语学校八年级英语语法知识点巩固习题及答案
- 2026年心理测量技术专项训练题库及答案
- 2026人工智能陪伴机器人技术发展及服务行业应用场景创新
- 2026中国造纸制浆流程泵绿色制造技术发展趋势分析报告
- 2026年人教版高中一年级语文第6单元综合测试卷及答案
- 湖北省武汉市水果湖高级中学高一语文古诗文阅读理解试卷及答案
- 2026年人教版高一语文上册第6单元现代文阅读专项训练习题及答案
- 装配钳工试题题库及答案
- GB/T 45602-2025船舶与海洋技术可调式滚轮闸刀掣链器
- 2025年康复治疗师职业资格考试试题及答案
- 2025水土保持监测技术规范
- 2.2.1不等式及其性质 高一数学(人教B版2019必修第一册)
- 双峰驼血浆外泌体的分离鉴定及其差异miRNA生物信息学分析
- 有限空间作业审批制度(2篇)
- 中建龙门吊安拆专项施工方案
- DB15T3644-2024 国有企业阳光采购规范
- 大型健康科普活动方案设计
- 低压带电作业安全措施工作注意事项
评论
0/150
提交评论