Java 多线程多选题

2025 年 8 月 7 日 | 阅读 6 分钟

1. 在 Java 中创建线程的正确方法是?

  1. 实现 Thread 类。
  2. 实现 Runnable 接口。
  3. 继承 Runnable 类。
  4. A 和 B 都是。

答案:B

解释: 创建线程的正确方法是通过实现Runnable 接口或继承 Thread 类。实现 Runnable 接口更受青睐,因为类还可以继承其他类,并且可以成功地为内部类提供所需的契约。


2. 如果在创建 Java 线程时未指定优先级,该线程的优先级是多少?

  1. 0
  2. 5
  3. 10
  4. 1

答案:B

解释: Java 线程的默认优先级是“5”。线程优先级范围是 1 到 10,其中 1 代表最低优先级,10 代表最高优先级,当有两个或多个线程准备执行时,JVM 会根据优先级来选择要执行的线程。


3. 如何创建用于执行附加线程的方法?

  1. run()
  2. start()
  3. execute()
  4. init()

答案:B

解释: start() 方法启动一个新线程,对其进行初始化,然后执行 run() 方法。直接调用 run() 方法将在同一线程中执行,而不会创建新线程。


4. Java 中线程优先级的最大值是多少?

  1. 1
  2. 5
  3. 10
  4. 100

答案:C

解释:Java中,线程的最大优先级是 10。线程优先级有助于 JVM 确定在给定的一组线程中应首先运行哪个线程。


5. 当直接调用 run() 方法而不是 start() 方法时,Java 中会发生什么?

  1. run() 方法将在新线程中执行。
  2. run() 方法将在当前线程中执行。
  3. 将抛出异常。
  4. 线程将进入等待状态。

答案:B

解释: 这意味着如果直接调用 run() 方法,就像调用其他任何方法一样,run() 方法将在当前线程中执行,而不会创建新线程。


6. 在基于知识的问题中,以下哪种是停止 Java 线程的有效方法?

  1. stop()
  2. exit()
  3. interrupt()
  4. terminate()

答案:C

解释: interrupt() 方法是多线程中用于礼貌地中断线程的另一种方法。stop() 等方法在工作中不被推荐,因为它们会产生任意状态并导致死锁。interrupt() 方法会改变线程的中断状态标记,并使线程能够以正确的方式处理中断。


7. 在操作系统中,哪种方法可以使线程休眠特定时间?

  1. wait()
  2. notify()
  3. sleep()
  4. yield()

答案:C

解释: sleep() 方法会使当前正在运行的线程等待或“休眠”指定的毫秒数,然后再继续执行。线程在此期间不会释放任何互斥锁。


8. 使用何种机制来挂起一个线程,以便让其他线程有机会运行一段时间?

  1. wait()
  2. sleep()
  3. notify()
  4. yield()

答案:D

解释: yield() 方法用于挂起当前线程,以便让具有至少同等优先级的其他线程有机会运行。这只是给线程调度器的建议,线程调度器可能不会如愿以偿,因此其他线程可以立即得到处理。


9. 当一个线程在等待、休眠或执行任何其他需要有限时间的操作时被抢占,会抛出哪种异常?

  1. ThreadInterruptedException
  2. IllegalThreadStateException
  3. InterruptedException
  4. TimeoutException

答案:C

解释: 当一个线程处于等待、休眠或等待状态并被中断时,会引发 InterruptedException。这使得线程能够接受中断并正确停止执行。


10. 哪种通知策略可以让所有等待特定资源的线程了解更新?

  1. notifyAll()
  2. notify()
  3. interrupt()
  4. release()

答案:A

解释: notifyAll() 方法会唤醒所有等待对象监视器的线程,而 notify() 方法只会唤醒一个。当您打算通知多个线程继续执行时,理解这一点很重要。


11. Java 中哪个类提供了一个高级API来管理同步,而无需使用 synchronized 和 wait()/notify() 技术?

  1. Thread
  2. ExecutorService
  3. ReentrantLock
  4. 信号量

答案:C

解释: ReentrantLock 类比 synchronized 关键字提供了更高级的线程同步功能。它支持可重入锁定、公平性策略和定时锁定等特性。


12. volatile 关键字在 Java 中保证什么?

  1. 该变量永远不会被本地缓存。
  2. 同一时间只有一个线程可以访问该变量。
  3. 该变量的值始终从主内存读取并写入主内存。
  4. 该变量对线程是只读的。

答案:C

解释: volatile 关键字通过强制所有读写操作仅在主内存和线程之间进行,保证所有线程都能访问统一的变量值。


13. 如何检查线程当前是否处于活动状态?

  1. isActive()
  2. isAlive()
  3. checkThread()
  4. isRunning()

答案:B

解释: isAlive() 方法确认线程是否已启动运行且尚未停止。如果线程正在运行或处于就绪状态,则返回 true;如果线程已完成执行,则返回 false。


14. Java 中 ThreadLocal 类的目的是什么?

  1. 确保每个线程都有自己的变量实例。
  2. 管理线程优先级。
  3. 管理线程池。
  4. 确保只有一个线程访问共享资源。

答案:A

解释: ThreadLocal 类为每个线程提供了一个独立初始化的变量实例。这对于维护每个线程的上下文而不与其他线程共享变量是必要的。


15. Java 并发框架的哪个部分允许任务的异步执行?

  1. Runnable
  2. ExecutorService
  3. Callable
  4. B 和 C 均支持

答案:D

解释: Java 并发框架包括 ExecutorService 和 Callable。管理线程池和异步执行任务属于 ExecutorService,而 Callable 用于捕获会返回结果的任务。


16. 实现 Runnable 接口的类必须实现什么?

  1. run()
  2. start()
  3. execute()
  4. call()

答案:A

解释: 实现 Runnable 接口要求类必须有一个 run() 方法。该方法包含指定线程必须完成的任务的代码。


17. Java 中 sleep() 方法的意图是什么?

  1. 释放线程持有的所有锁。
  2. 使线程无限期等待。
  3. 暂停线程的执行一段特定时间。
  4. 启动一个新线程。

答案:C

解释: sleep() 方法会暂停活动线程一段指定的时间(以毫秒为单位)。它不会释放线程持有的任何锁,并允许其他线程在此期间运行。


18. 如果两个线程同时在同一个 Thread 对象上执行 start() 方法,会发生什么?

  1. 两个线程将并发运行。
  2. 将抛出 IllegalThreadStateException。
  3. 线程将立即终止。
  4. 只有一个线程会运行,另一个将等待。

答案:B

解释: 对同一个 Thread 对象多次调用 start() 方法将抛出 IllegalThreadStateException。一个线程只允许调用一次 start() 方法,后续调用无效。


19. 关于 Java 中的守护线程,以下哪项是事实?

  1. 守护线程可以阻止 JVM 关闭。
  2. 守护线程不能被中断。
  3. 当没有用户线程运行时,守护线程会被自动终止。
  4. 守护线程默认以最高优先级运行。

答案:C

解释: 守护线程的作用是支持用户线程。如果没有任何用户线程在运行,JVM 将自动结束所有剩余的守护线程,然后关闭自身。


20. Runnable 和 Callable 接口在 Java 中的主要区别是什么?

  1. Runnable 可以返回结果,而 Callable 不能。
  2. Callable 可以抛出检查型异常,而 Runnable 不能。
  3. Runnable 接受参数,而 Callable 不接受。
  4. Runnable 是并发框架的一部分,而 Callable 不是。

答案:B

解释: Callable 可以产生结果并抛出检查型异常,而 Runnable 不允许返回结果且不能容忍检查型异常。在各种场景下,Callable 的适应性更强。


下一个话题Infosys 含义