java程序员技术面试常见面试?
1.什么是线程?
线程是操作系统可以调度操作的一个小单元。它包含在流程中,是流程中的实际操作单元。程序员可以使用它进行多处理器编程,您可以使用多线程来加速计算密集型任务。例如,如果一个线程完成一项任务需要100毫秒,那么十个线程完成这项任务只需要10毫秒。
2.线程和进程的区别是什么?
线程是进程的子集。一个进程可以有许多线程,每个线程并行执行不同的任务。不同的进程使用不同的内存空间,所有线程* * *共享相同的内存空间。每个线程都有一个单独的堆栈存储器来存储本地数据。
3.如何用Java实现线程?
有两种方法:java.lang.Thread类的实例是一个线程,但它需要调用java.lang.Runnable接口来执行。由于线程类本身就是被调用的Runnable接口,所以可以继承java.lang.Thread类或者直接调用Runnable接口重写run()方法来实现线程。
4.有哪些不同的线程生命周期?
当我们在Java程序中创建新线程时,它的状态是新的。当我们调用线程的start()方法时,状态变为Runnable。线程调度器将CPU时间分配给可运行线程池中的线程,并告诉它们将状态改为运行。其他线程状态为等待、阻塞和死亡。
5.你对线程优先级的理解是什么?
每个线程都有优先级。一般来说,优先级高的线程在运行时会有优先级,但这取决于线程调度的实现,这是OS依赖的。我们可以定义线程的优先级,但这并不能保证高优先级线程会在低优先级线程之前执行。线程优先级是一个int变量(从1到10),1代表低优先级,10代表高优先级。
6.什么是死锁?如何分析和避免死锁?
死锁是指两个以上的线程被永远阻塞的情况,这至少需要两个线程和两个资源。
要分析死锁,我们需要看看Java应用程序的线程转储。我们需要找出哪些线程被阻塞了,以及它们正在等待的资源。每个资源都有一个唯一的id,通过它我们可以发现哪些线程已经拥有了它的对象锁。