今天我们继续来看一些Java面试题,基本上是面试的时候常问的,有一定的概率会遇到,希望大家可以面试顺利。

1. 说出几个线程池的参数。

corePoolSize:线程池核心线程大小

maximumPoolSize:线程池最大线程数量

keepAliveTime:空闲线程存活时间

unit:空闲线程存活时间单位

workQueue:工作队列

threadFactory:线程工厂

handler:拒绝策略

2. 说出常用的几种线程池。

newCachedThreadPool

创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们。

对于执行 很多短期异步任务的程序而言,这些线程池通常可提高程序性能。调用 execute 将重用以前构造 的线程(如果线程可用)。

如果现有线程没有可用的,则创建一个新线程并添加到池中。

终止并 从缓存中移除那些已有 60 秒钟未被使用的线程。因此,长时间保持空闲的线程池不会使用任何资源。

newFixedThreadPool

创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程。

在任意点,在大多数 nThreads 线程会处于处理任务的活动状态。

如果在所有线程处于活动状态时提交附加任务, 则在有可用线程之前,附加任务将在队列中等待。如果在关闭前的执行期间由于失败而导致任何线程终止,那么一个新线程将代替它执行后续的任务(如果需要)。

在某个线程被显式地关闭之 前,池中的线程将一直存在。

newScheduledThreadPool

创建一个线程池,它可安排在给定延迟后运行命令或者定期地执行。

newSingleThreadExecutor

Executors.newSingleThreadExecutor()返回一个线程池(这个线程池只有一个线程),这个线程 池可以在线程死后(或发生异常时)重新启动一个线程来替代原来的线程继续执行下去!

3. 简述线程的生命周期。

新建状态(NEW)

就绪状态(RUNNABLE)

运行状态(RUNNING)

阻塞状态(BLOCKED)

线程死亡(DEAD)

4. 说出终止线程的几种方式。

程序正常运行结束

使用退出标志退出线程

一般 run()方法执行完,线程就会正常结束,然而,常常有些线程是伺服线程。它们需要长时间的 运行,只有在外部某些条件满足的情况下,才能关闭这些线程。使用一个变量来控制循环,例如: 最直接的方法就是设一个 boolean 类型的标志,并通过设置这个标志为 true 或 false 来控制 while 循环是否退出。

Interrupt 方法结束线程。

stop 方法终止线程(线程不安全)。

注:其中的解答只是个基本答案,不是什么标准答案,每个人面试的时候都不一样,所以面试题的解答方式还需要自己心有腹稿,只是一个记录,望大家可以稍作借鉴。