4.多线程高频面试题整理

本文详细介绍了多线程的面试重点,包括进程与线程的区别,Thread的start和run方法的不同,Thread与Runnable的关系,处理线程返回值的方法,以及Sleep和Wait的使用区别。内容覆盖了线程的基本概念、操作以及状态转换,对于理解和掌握多线程知识有极大帮助。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

4.1 进程和线程的区别

进程是资源分配的最小单位,线程是CPU调度的最小单位。线程是进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度和分派的基本单位。进程(Process)是操作系统分配资源的基本单位,一个进程拥有的资源有自己的堆、栈、虚存空间(页表)、文件描述符等信息。

进程和线程的区别主要体现在以下几点。

区别1:从属关系不同:进程是正在运行程序的实例,进程中包含了线程,而线程中不能包含进程。

区别2:描述侧重点不同:进程是操作系统分配资源的基本单位,而线程是操作系统调度的基本单位。

区别3:共享资源不同:多个进程间不能共享资源,每个进程有自己的堆、栈、虚存空间(页表)、文件描述符等信息,而线程可以共享进程资源文件(堆和方法区)。

区别4:上下文切换速度不同:线程上下文切换速度很快(上下文切换指的是从一个线程切换到另一个线程),而进程的上下文切换的速度比较慢。

区别5:操纵者不同:一般情况下进程的操纵者是操作系统,而线程的操纵者是编程人员。

4.2 Thread中start方法与run方法的区别

Start方法会调用JVM中的StartThread方法,并通过thread_entry方法去调用run方法。

因此,调用Start方法会创建一个新的子线程并启动,run方法只是Thread一个普通方法的调用。

4.3 Thread 和 Runnable是什么关系

 Thread是一个类,而Runnable是一个接口。Thread是一个实现了Runnable接口的类,使run支持多线程。因类的单一继承原则,推荐多使用Runnable接口。

4.4 如何实现处理线程的返回值

1. 主线程等待法

2. 使用Thread类的join()阻塞当前线程以等待子线程处理完毕

3. 通过Callable接口实现:通过FutureTask 或者 线程池获取

4.5 线程的状态

新建(New)∶创建后尚未启动的线程的状态

运行(Runnable):包含Running和Ready

无限期等待(Waiting):不会被分配CPU执行时间,需要显式被唤醒

限期等待(Timed Waiting):在一定时间后会由系统自动唤醒

阻塞(Blocked):等待获取排它锁

结束(Terminated):已终止线程的状态,线程已经结束执行

4.6 Sleep和Wait的区别

sleep是Thread类的方法,wait是Object类中定义的方法

sleep()方法可以在任何地方使用

wait()方法只能在synchronized方法或synchronized块中使用

最主要的本质区别

Thread.sleep只会让出CPU,不会导致锁行为的改变

Object.wait不仅让出CPU,还会释放已经占有的同步资源锁

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值