JAVA多线程与并发基础专题测试
考察知识点
本试卷涵盖以下核心知识点:
线程的创建与启动(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阻塞操作
关于Java中创建线程的方式,下列说法正确的是:
关于Callable接口和Runnable接口的区别,以下说法正确的有哪些?
调用Thread对象的start()方法会立即启动一个新线程并执行run()方法中的代码。
以下代码的执行结果是什么?
Thread t = new Thread(() -> {
System.out.print("A");
});
t.run();
t.start();
System.out.print("B");
Java中创建线程的三种主要方式分别是:继承______类、实现________接口、实现________接口配合FutureTask使用。
线程从RUNNABLE状态转换为BLOCKED状态的原因可能是:
关于Java线程的状态,以下说法正确的有哪些?
以下哪种情况会使线程进入WAITING状态而不是TIMED_WAITING状态?
Java线程有六种状态,分别是:______、________、_______、_______、_____________、__________。
关于synchronized关键字,下列说法正确的是:
关于synchronized锁的升级过程,以下说法正确的有哪些?
使用synchronized代码块时,应该锁住方法参数对象而不是创建新的锁对象,这样更高效。
以下单例模式的双重检查锁定实现,缺少的关键关键字是什么?
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;
}
}
Thread.join()方法的作用是什么?
线程池关闭时,应该直接调用shutdownNow()方法强制终止所有正在执行的任务。
ThreadPoolExecutor的七个核心参数分别是:____________、_______________、_____________、______、_________、_____________、_______。
请简述CountDownLatch和CyclicBarrier的区别,并举例说明各自的应用场景。
ABA问题是什么,如何解决?
ReentrantLock的公平锁和非公平锁的主要区别是什么?
关于Java并发容器,以下说法正确的有哪些?
📝 发现内容有误?点击此处直接编辑
长按或扫描二维码,立即体验