多线程并发试题及答案.docxVIP

  • 1
  • 0
  • 约1.01万字
  • 约 17页
  • 2026-02-07 发布于江西
  • 举报

第PAGE页共NUMPAGES页

多线程并发试题及答案

一、选择题(每题3分,共30分)

1.关于Java线程的创建,以下说法正确的是()。

A.继承Thread类并重写run()方法是唯一创建线程的方式

B.实现Runnable接口并重写run()方法,需要创建Thread实例并传入Runnable对象

C.实现Callable接口可以创建线程,且能直接通过new关键字实例化线程

D.使用线程池创建线程时,线程必须继承Thread类

2.以下关于Thread类中start()和run()方法的描述,正确的是()。

A.调用run()方法会启动新线程并执行run()中的代码

B.调用start()方法会立即执行run()中的代码,且当前线程会阻塞

C.start()方法会创建新的线程,由JVM调用该线程的run()方法

D.多次调用start()方法不会抛出异常,因为线程可以重复启动

3.下列关于synchronized关键字的描述,错误的是()。

A.synchronized修饰的实例方法,锁对象是当前对象实例(this)

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

C.同步代码块中的锁对象可以是任意类型的对象,但必须保证多个线程使用同一锁对象

D.synchronized关键字会自动释放锁,即使同步代码块中发生未处理的异常

4.以下关于volatile关键字的说法,正确的是()。

A.volatile能保证变量的原子性,因此可以替代synchronized

B.volatile修饰的变量,每次读取都会从主内存中重新加载,保证了可见性

C.volatile能保证线程执行的有序性,禁止指令重排序

D.volatile适用于所有需要保证线程安全的场景

5.线程池的核心参数中,以下说法正确的是()。

A.corePoolSize表示线程池中始终存在的线程数量,即使线程空闲也不会被回收

B.maximumPoolSize表示线程池允许的最大线程数,当任务队列满时会创建新线程直到达到该值

C.keepAliveTime表示线程空闲后的存活时间,当线程数超过corePoolSize时生效

D.workQueue是任务队列,必须使用有界队列,否则可能导致内存溢出

6.下列关于死锁的描述,正确的是()。

A.死锁是指多个线程因互相等待对方持有的资源而无限阻塞的现象

B.死锁一旦发生,只能通过操作系统强制终止线程来解决

C.破坏“不可抢占”条件可以避免死锁,即允许线程主动抢占其他线程的资源

D.死锁的四个必要条件:互斥、不可抢占、请求与保持、循环等待,必须同时满足才会发生

7.以下属于线程不安全集合的是()。

A.ArrayList

B.Vector

C.CopyOnWriteArrayList

D.ConcurrentHashMap

8.关于线程的生命周期,以下说法正确的是()。

A.线程创建后直接进入运行状态(RUNNABLE)

B.线程调用wait()方法后会进入阻塞状态(BLOCKED)

C.线程调用sleep()方法后会进入timed_waiting状态,超时后自动进入RUNNABLE状态

D.线程执行完毕后会进入terminated状态,之后可以重新启动

9.下列关于CAS(CompareAndSwap)操作的说法,正确的是()。

A.CAS是乐观锁的实现,不会出现线程阻塞,因此性能一定优于悲观锁

B.CAS操作包含三个操作数:内存位置(V)、预期原值(A)、新值(B),只有当V的值等于A时才会将V更新为B

C.CAS在多线程高并发场景下会出现“ABA问题”,即变量的值从A变成B又变回A,CAS操作会误认为值未被修改

D.Java中的AtomicInteger类底层使用CAS实现,因此可以保证所有操作的原子性

10.线程池的拒绝策略(RejectedExecutionHandler)中,以下说法错误的是()。

A.AbortPolicy(默认策略):直接抛出RejectedExecutionException异常

B.CallerRunsPolicy:由调用线程(提交任务的线程)执行该任务

C.DiscardPo

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档