Java线程专项试题(含详细答案解析)_第1页
Java线程专项试题(含详细答案解析)_第2页
Java线程专项试题(含详细答案解析)_第3页
Java线程专项试题(含详细答案解析)_第4页
Java线程专项试题(含详细答案解析)_第5页
已阅读5页,还剩2页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java线程专项试题(含详细答案解析)适用场景:Java基础进阶考核、面试刷题、在校生实训测试题型分布:单选题10题、填空题5题、简答题6题、编程题2题满分:100分一、单项选择题(每题2分,共20分)1.Java中线程的最小执行单位是?()A.进程B.线程C.代码块D.程序答案:B解析:进程是系统资源分配的最小单位,线程是程序执行、CPU调度的最小单位,一个进程可包含多个线程,线程共享进程资源。2.以下哪种方式不能创建Java线程?()A.继承Thread类B.实现Runnable接口C.实现Callable接口D.定义静态代码块答案:D解析:Java创建线程的常用方式有三种:继承Thread类、实现Runnable接口、实现Callable接口结合线程池。静态代码块仅用于类加载时初始化数据,无法创建线程。3.调用线程的start()方法和run()方法的核心区别是?()A.无区别B.start()启动新线程,run()仅执行普通方法C.run()启动新线程,start()阻塞线程D.start()是静态方法,run()是实例方法答案:B解析:start()方法会向JVM发起线程创建请求,开启新的执行线程,由JVM调用run()方法;直接调用run()只是普通的对象方法调用,不会创建新线程,执行逻辑仍在当前主线程中。4.下列线程状态中,属于阻塞状态的是?()A.NEWB.RUNNABLEC.BLOCKEDD.TERMINATED答案:C5.关于sleep()和wait()方法,说法正确的是?()A.两者都会释放锁B.sleep()不释放锁,wait()释放锁C.sleep()释放锁,wait()不释放锁D.两者都不释放锁答案:B解析:sleep()是Thread类静态方法,仅让线程休眠指定时间,不释放锁资源;wait()是Object类方法,必须在同步代码块中执行,会主动释放锁,进入对象等待池。6.能唤醒调用wait()方法进入等待状态线程的是?()A.notify()B.run()C.start()D.sleep()答案:A解析:Object类提供notify()(唤醒单个等待线程)、notifyAll()(唤醒所有等待线程),专门用于唤醒wait()阻塞的线程。7.Java中同步关键字synchronized的作用是?()A.提高线程执行速度B.保证线程安全,解决并发数据竞争C.创建新线程D.终止线程答案:B解析:synchronized是Java原生同步锁,可修饰方法或代码块,保证同一时间只有一个线程执行同步逻辑,解决多线程并发操作共享变量的数据安全问题。8.线程优先级的取值范围是?()A.0-10B.1-10C.1-5D.0-15答案:B解析:Java线程优先级分为10级,1(MIN_PRIORITY,最低)~10(MAX_PRIORITY,最高),默认优先级为5(NORM_PRIORITY)。优先级仅为CPU调度参考,不保证绝对执行顺序。9.以下关于volatile关键字说法错误的是?()A.保证变量可见性B.禁止指令重排序C.保证原子性D.轻量级同步机制答案:C解析:volatile核心作用:保证多线程变量可见性、禁止JVM指令重排序;不保证原子性,无法解决i++等复合操作的并发问题。10.线程池核心参数中,核心线程数的作用是?()A.线程池最大容纳线程数量B.线程池长期保留的常驻线程数量C.空闲线程的存活时间D.任务队列最大容量答案:B解析:核心线程数是线程池的常驻线程,即使处于空闲状态也不会被回收;最大线程数是线程池可创建的最大线程总量。二、填空题(每空2分,共20分)1.线程的生命周期五大状态分别是新建、________、阻塞、等待、________。答案:可运行、终止2.实现Runnable接口需要重写________方法。答案:run()3.wait()、notify()、notifyAll()是________类的方法,必须在________场景下使用。答案:Object、同步代码块/同步方法4.解决多线程原子性问题,除了synchronized,还可以使用________包下的原子类。答案:java.util.concurrent.atomic5.线程池中________队列用于存储等待执行的任务,当核心线程已满时,新任务会进入该队列。答案:阻塞6.终止线程的合理方式是________,不推荐使用stop()方法。答案:设置线程标记位退出三、简答题(每题6分,共36分)1.简述Thread类和Runnable接口创建线程的区别?答案解析:(1)继承Thread类:线程类直接继承Thread,重写run()方法,由于Java是单继承,该类无法再继承其他父类,扩展性差;每次创建线程都会生成独立对象,适合简单线程场景。(2)实现Runnable接口:仅实现接口、重写run(),不占用继承名额,可继承其他类;多个线程可共享同一个Runnable对象,适合多线程处理同一任务的场景,是开发中首选方式。2.简述sleep()、yield()、join()三个线程方法的作用和区别?答案解析:(2)yield():主动让出当前CPU执行时间片,线程回到可运行状态,不阻塞、不释放锁,仅让同优先级线程有执行机会,执行效果不稳定。(3)join():主线程等待子线程执行完成后再继续执行,会阻塞当前线程,直至目标线程终止。3.什么是线程安全?导致线程不安全的原因有哪些?答案解析:线程安全:多线程并发操作共享资源时,程序运行结果和单线程执行结果一致,不会出现数据错乱、脏数据等问题。不安全核心原因:(1)多线程共享全局变量/成员变量;(2)线程执行存在抢占式调度,执行顺序不可控;(3)操作存在复合步骤(非原子操作);(4)内存可见性、指令重排序问题。4.synchronized和Lock锁(ReentrantLock)的区别?答案解析:(1)语法层面:synchronized是Java原生关键字,隐式加锁解锁;Lock是接口,需要手动调用lock()加锁、unlock()解锁。(2)功能层面:Lock灵活性更高,可实现公平锁、可中断锁、超时锁,支持多条件唤醒;synchronized仅支持非公平锁,功能单一。(3)性能层面:JDK1.6后synchronized引入偏向锁、轻量级锁优化,性能与Lock基本持平,低并发场景更优。(4)异常处理:synchronized发生异常会自动释放锁;Lock必须在finally中手动解锁,否则会造成锁死。5.简述线程池的优势,为什么不推荐手动newThread创建线程?答案解析:线程池核心优势:(1)复用线程,避免频繁创建、销毁线程带来的性能开销;(2)统一管理线程数量,避免无限创建线程导致内存溢出、CPU耗尽;(3)提供任务队列、拒绝策略,适配高并发任务处理;(4)可统一监控、调度线程任务。手动创建线程弊端:线程无统一管理,并发量大时会创建大量线程,占用系统资源,降低系统稳定性,且任务执行无规则、无法复用。6.简述volatile关键字的使用场景?为什么不能保证原子性?答案解析:使用场景:(1)状态标记量(线程启停、开关标识);(2)双重校验锁实现单例模式;(3)简单变量的可见性同步。无法保证原子性原因:原子性要求操作不可拆分,而volatile仅保证变量内存可见。类似i++的操作分为读取、运算、赋值三步,多线程下三步操作可能被其他线程打断,导致数据覆盖,因此无法保证原子性。四、编程题(每题12分,共24分)1.分别通过继承Thread类和实现Runnable接口创建线程,在线程中循环打印1-5的数字。参考答案代码:java

//方式1:继承Thread类

classMyThreadextendsThread{

@Override

publicvoidrun(){

for(inti=1;i<=5;i++){

System.out.println("Thread线程打印:"+i);

}

}

}

//方式2:实现Runnable接口

classMyRunnableimplementsRunnable{

@Override

publicvoidrun(){

for(inti=1;i<=5;i++){

System.out.println("Runnable线程打印:"+i);

}

}

}

publicclassThreadTest{

publicstaticvoidmain(String[]args){

//启动Thread线程

newMyThread().start();

//启动Runnable线程

newThread(newMyRunnable()).start();

}

}

2.编写多线程代码,实现两个线程交替打印1-100的数字(线程A打印奇数,线程B打印偶数)。参考答案代码(同步锁+等待唤醒机制):java

publicclassAlternatePrint{

//共享变量

privatestaticintnum=1;

//锁对象

privatestaticfinalObjectLOCK=newObject();

//打印奇数线程

staticclassOddThreadimplementsRunnable{

@Override

publicvoidrun(){

while(num<=100){

synchronized(LOCK){

//不是奇数则等待

if(num%2==0){

try{

LOCK.wait();

}catch(InterruptedExceptione){

e.printStackTrace();

}

}

if(num<=100){

System.out.println("奇数线程:"+num);

num++;

}

//唤醒另一个线程

LOCK.notify();

}

}

}

}

//打印偶数线程

staticclassEvenThreadimplementsRunnable{

@Override

publicvoidrun(){

while(num<=100){

synchronized(LOCK){

//不是偶数则等待

if(num%2!=0){

try{

LOCK.wait();

}catch(InterruptedExceptione){

e.printStackTrace();

}

}

if(num<=100){

System.out.println("偶数线程:"+num);

num++;

}

//唤醒另一个线程

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论