java线程池面试题 Java线程池的面试题 让面试更稳妥

栏目:游戏 2021-09-20 00:06:41
分享到:

1)什么是线程?

线程是操作系统可以调度操作的最小单元。它包含在流程中,是流程中的实际操作单元。程序员可以使用它进行多处理器编程,您可以使用多线程来加速计算密集型任务。例如,如果一个线程完成一个任务需要100毫秒,那么十个线程完成这个任务只需要10毫秒。Java在语言层面为多线程提供了优秀的支持,也是一个很好的卖点。

2)线程和进程有什么区别?

线程是进程的子集。一个进程可以有许多线程,每个线程并行执行不同的任务。不同的进程使用不同的内存空,而所有线程共享相同的内存空。不要将其与堆栈内存混淆。每个线程都有自己的堆栈内存来存储本地数据。

3)如何在Java中实现线程?

语言层面有两种方式。java.lang.Thread类的实例是一个线程,但是它需要调用java.lang.Runnable接口来执行。由于线程类本身就是调用Runnable的接口,所以可以继承java.lang.Thread类或者直接调用Runnable接口重写run方法来实现线程。

4)可运行还是线程?

这个问题是上述问题的后续。大家都知道我们可以通过继承Thread类或者调用Runnable接口来实现线程。问题是,哪种方法更好?在什么情况下应该使用?这个问题很容易回答,如果你知道Java不支持类的多重继承,但是允许你调用多个接口。所以如果你想继承其他类,当然应该调用Runnable接口。

6)Thread类中的start和run方法有什么区别?

这个问题经常被问到,但是可以区分面试官对Java线程模型的理解。start方法用于启动新创建的线程,run方法在start内部调用,不同于直接调用run方法的效果。当您调用run方法时,它将只在原始线程中被调用。如果没有启动新线程,start方法将启动新线程。

7)Java中的Runnable和Callable有什么区别?

Runnable和Callable都表示要在不同线程中执行的任务。Runnable从JDK1.0开始就有了,Callable是在JDK1.5中加入的,两者的主要区别是Callable的调用方法可以返回值并抛出异常,而Runnable的run方法没有这些功能。Callable可以返回加载了计算结果的Future对象。

CyclicBarrier和CountDownLatch在8)Java中有什么区别?

CyclicBarrier和CountDownLatch可用于使一组线程等待其他线程。与CyclicBarrier不同,CountdownLatch不能重复使用。

9)什么是9)Java内存模型?

Java内存模型指定并指导Java程序在不同的内存架构、CPU和操作系统中确定性地运行。这在多线程的情况下尤其重要。Java内存模型对一个线程所做的改变,其他线程可以看到,它们之间的关系首先发生。这种关系定义了一些规则,使程序员在并发编程中思考得更清楚。例如,首先做爱可以确保:

线程中的代码可以按顺序执行,这就是所谓的程序顺序规则。

对于同一个锁,解锁操作必须发生在稍后发生的另一个锁定操作之前,这也称为管道端锁定规则。

前一个易失性写操作先于后一个易失性读操作,这也称为易失性变量规则。

线程内的任何操作都必须在该线程的启动调用之后,这也称为线程启动规则。

线程的所有操作都将在线程终止之前终止。

对象的终止操作必须在对象构造之后完成,这也称为对象终止规则。

转移性

我强烈建议您阅读《Java并发编程实践》第16章,以加深对Java内存模型的理解。

10)Java中的volatile变量是什么?

Volatile是一个特殊的修饰符,只能由成员变量使用。在Java并发程序中没有同步类的情况下,对成员变量的多线程操作对其他线程是透明的。Volatile变量可以保证下一个读操作发生在前一个写操作之后,这就是上一个问题中的volatile变量规则。