Java并发编程常见面试题
1.什么是线程和进程?
进程是操作系统分配资源的最小单位,各个进程之间占据独立的寻址空间,运行也是独立运行,进程间通信需要一些机制。进程间切换需要的开销较大。
线程是程序执行的基本单位,一个进程可以开启多个线程,他们的很多空间,比如堆空间,其他资源都是公用的。对于java来说,线程有自己的虚拟机栈,本地方法栈,和程序计数器。线程执行开销小,但是不够安全。
2. 虚拟机栈和本地方法栈,程序计数器为什么是私有的?
- 虚拟机栈:每个java方法在执行的时候,都会创建栈帧,来记录局部变量,操作数栈,引用等等。为了保证线程的局部变量不被别的线程访问,应该设为私有。
- 本地方法栈道理类似。程序计数器是记录方法执行到了哪里,用来在线程切换的时候恢复到正确的位置,自然要一个线程一个。
3.线程的生命周期与状态


线程创建之后处于New阶段,调用start()方法之后,处于ready阶段,获得cpu时间片时处于running阶段。
但是操作系统笼统认为处于runnable阶段。
执行wait()、join()之后,进入WAITING阶段,等待别的线程的通知,才能正常运行,此时释放资源。
执行sleep(long millis),wait(long millis)之后,进入TIME_WAITING阶段。时间过了就回到Runnable阶段。
在调用同步方法,却没有获得锁的时候,进入block阶段,执行完run方法,进入TERMINATED阶段。
4. 什么是线程死锁
持有对方想要的资源,期待获得对方持有的资源,形成了一个圈。互相等待谁也不让。

public class DeadLockDemo{
private static Object obj1 = new Object();
private static Object obj2 = new Object()

最低0.47元/天 解锁文章
2132

被折叠的 条评论
为什么被折叠?



