写在前面
在之前总结重点笔记的基础上,我们看一下面经中出现的常见面试题。
1. 线程和进程间的区别
- 进程概念
进程是程序执行的一个实例,是操作系统进行 资源分配的基本单位,有独立的内存空间 - 线程概念
线程是程序执行的最小单元,是操作系统可以调度的最小单元。 - 区别
- 资源:进程是资源分配的最小单位,线程是程序执行的最小单位。进程有自己独立的地址空间(堆栈代码区),而线程之间共用。
-
调度:进程切换开销很大,线程切换开销小。
因为线程间共用同一个内存空间,所以切换开销小的多。 - 通信:进程间通信 IPC,线程间通信需要通过多线程的相关操作来完成。
- 应用场景:对数据保护要求高,切换开销要求不高,用多进程。反之用多线程。
2. 多线程间如何通信
- Volatile 关键字
因为 Volatile 关键字是有可见性和有序性。所以可以用来做线程间通信 - wait & notify & notifyAll
可以实现线程间互相唤醒的操作,从而实现线程间通信 - ReentrantLock & Condition 条件
这两个结合起来,就跟2中说到的 Sync + wait / notify 是一样的,功能更加强大,可以实现精准的唤醒。 - 倒计时器 CountDownLatch
倒计时器中的 countDown() 方法,实际上也是维护了一个 线程共享变量 state 才完成的。
网友评论