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

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,还会释放已经占有的同步资源锁

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值