全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页

JAVA多线程与并发基础专题测试

20 题 50 分钟 难度:

考察知识点

本试卷涵盖以下核心知识点:

线程的创建与启动(4题)

  • 继承Thread类创建线程
  • 实现Runnable接口创建线程
  • 实现Callable接口配合FutureTask
  • Thread类实现了Runnable接口
  • start()与run()方法的区别
  • Callable与Runnable的区别

线程的生命周期(3题)

  • 线程六种状态:NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED
  • RUNNABLE包含就绪和运行两种状态
  • BLOCKED状态:等待获取synchronized锁
  • WAITING状态:wait()、join()、park()
  • TIMED_WAITING状态:sleep()、wait(timeout)、join(timeout)
  • 状态转换条件

线程同步与锁(4题)

  • synchronized关键字修饰方法与代码块
  • synchronized锁的对象:实例对象、Class对象
  • synchronized是可重入锁
  • 双重检查锁定需要volatile修饰
  • synchronized锁升级:偏向锁→轻量级锁→重量级锁
  • 锁对象应使用private final对象

线程间通信(2题)

  • wait()/notify()/notifyAll()机制
  • join()方法等待线程结束
  • wait/notify必须在synchronized块中使用
  • Condition的await()/signal()机制

线程池(2题)

  • ThreadPoolExecutor七个核心参数
  • 线程池关闭:shutdown()与shutdownNow()
  • corePoolSize、maximumPoolSize、workQueue配置
  • 拒绝策略处理器

并发工具类(1题)

  • CountDownLatch:一组线程完成后等待者继续
  • CyclicBarrier:一组线程互相等待同时执行
  • Semaphore:信号量控制并发数
  • Exchanger:线程间数据交换

原子类与CAS(1题)

  • AtomicInteger、AtomicLong原子操作
  • CAS(Compare And Swap)原理
  • ABA问题与AtomicStampedReference
  • LongAdder分散热点技术

锁机制(1题)

  • ReentrantLock公平锁与非公平锁
  • 公平锁按等待顺序获取锁
  • 非公平锁允许插队,性能更高
  • ReentrantLock需要手动释放锁

并发容器(1题)

  • ConcurrentHashMap不允许null键和null值
  • CopyOnWriteArrayList适合读多写少
  • ConcurrentLinkedQueue基于CAS的无界队列
  • BlockingQueue的put/take阻塞操作
1
单选题

关于Java中创建线程的方式,下列说法正确的是:

A

继承Thread类创建线程比实现Runnable接口更灵活

B

实现Runnable接口可以实现资源的共享,避免单继承的局限性

C

Thread类本身实现了Runnable接口

D

Callable接口可以直接创建线程

2
多选题

关于Callable接口和Runnable接口的区别,以下说法正确的有哪些?

A

Callable接口的call()方法可以返回结果

B

Runnable接口的run()方法没有返回值

C

Callable接口的call()方法可以抛出异常

D

Runnable接口的run()方法异常必须内部处理

3
判断题

调用Thread对象的start()方法会立即启动一个新线程并执行run()方法中的代码。

A

B

4
单选题

以下代码的执行结果是什么?

Java
Thread t = new Thread(() -> {
    System.out.print("A");
});
t.run();
t.start();
System.out.print("B");
A

输出AB或BA(取决于线程调度)

B

输出AAB

C

输出ABA

D

抛出IllegalThreadStateException

5
填空题

Java中创建线程的三种主要方式分别是:继承______类、实现________接口、实现________接口配合FutureTask使用。

6
单选题

线程从RUNNABLE状态转换为BLOCKED状态的原因可能是:

A

调用了sleep()方法

B

调用了wait()方法

C

等待获取synchronized锁

D

调用了join()方法

7
多选题

关于Java线程的状态,以下说法正确的有哪些?

A

NEW状态表示线程已创建但尚未启动

B

RUNNABLE状态表示线程正在运行或等待CPU时间片

C

TERMINATED状态表示线程已经执行完毕,不能重新启动

D

WAITING状态和TIMED_WAITING状态都是等待状态,区别是有无超时时间

8
单选题

以下哪种情况会使线程进入WAITING状态而不是TIMED_WAITING状态?

A

Thread.sleep(1000)

B

Object.wait()

C

Thread.join(1000)

D

LockSupport.parkNanos(1000)

9
填空题

Java线程有六种状态,分别是:___________________________________________________

10
单选题

关于synchronized关键字,下列说法正确的是:

A

synchronized修饰普通方法时,锁的是当前类的Class对象

B

synchronized修饰静态方法时,锁的是当前类的Class对象

C

synchronized代码块可以锁定任意对象

D

synchronized是可重入锁,同一线程可以多次获取同一把锁

11
多选题

关于synchronized锁的升级过程,以下说法正确的有哪些?

A

Java 6之后synchronized引入了偏向锁、轻量级锁、重量级锁三种状态

B

偏向锁适用于只有一个线程访问同步块的场景

C

锁升级过程是:偏向锁 -> 轻量级锁 -> 重量级锁,不可降级

D

轻量级锁使用CAS操作在栈帧中创建锁记录

12
判断题

使用synchronized代码块时,应该锁住方法参数对象而不是创建新的锁对象,这样更高效。

A

B

13
单选题

以下单例模式的双重检查锁定实现,缺少的关键关键字是什么?

Java
public class Singleton {
    private static Singleton instance;
    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}
A

instance需要volatile修饰

B

instance需要final修饰

C

synchronized需要修饰方法

D

需要使用AtomicReference

14
单选题

Thread.join()方法的作用是什么?

A

将当前线程添加到目标线程的等待队列

B

等待目标线程执行完毕后再继续当前线程

C

合并两个线程为一个线程执行

D

使目标线程立即结束执行

15
判断题

线程池关闭时,应该直接调用shutdownNow()方法强制终止所有正在执行的任务。

A

B

16
填空题

ThreadPoolExecutor的七个核心参数分别是:___________________________________________________________________________

17
简答题

请简述CountDownLatch和CyclicBarrier的区别,并举例说明各自的应用场景。

18
单选题

ABA问题是什么,如何解决?

A

原子操作失败问题,使用Atomic类解决

B

值从A变B再变A,CAS无法识别变化,使用版本号解决

C

多线程竞争问题,使用锁机制解决

D

内存可见性问题,使用volatile解决

19
单选题

ReentrantLock的公平锁和非公平锁的主要区别是什么?

A

公平锁性能更好,非公平锁性能较差

B

公平锁按等待顺序获取锁,非公平锁允许新线程插队

C

公平锁不会死锁,非公平锁可能死锁

D

公平锁只能用于单线程环境

20
多选题

关于Java并发容器,以下说法正确的有哪些?

A

ConcurrentHashMap不允许null键和null值

B

CopyOnWriteArrayList适合读多写少的场景

C

ConcurrentLinkedQueue是无界线程安全队列,基于CAS实现

D

BlockingQueue的put()方法在队列满时会阻塞等待

← 上一个试卷 JAVA基础IO与文件操作专题测试
下一个试卷 → JAVA字符串专题测试

📝 发现内容有误?点击此处直接编辑

想参加完整模拟考试?
小程序提供计时考试、自动评分和详细解析

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库