AI面试总结:wait()和sleep()区别
前言 wait()和sleep()是java面试中比较常见的...
Java面试时对应进程和线程的提问是最为常见的,下面记录一下进程和线程的区别,方便自己查阅和学习。
简单的说:进程就是正在运行的程序,也就常见的APP应用。
准确的说:进程是操作系统进行资源分配和隔离的基本单位。
隔离性强
稳定性高
安全性好
创建和切换开销大
资源占用多
进程间通信复杂
简单的说:线程是进程中的一条执行路径。
准确的说:线程是 CPU 调度和执行的最小单位。
线程的优点是
创建和切换开销小
通信效率高
能充分利用多核 CPU
从而显著提升系统的并发性能和响应速度,是现代高并发编程的基础。
主要缺点在于共享数据带来的
死锁风险
上下文切换开销
调试难道搞
维护成本
因此在高并发场景下通常不直接使用裸线程,而是通过线程池或异步模型来管理。
| 进程间通信 IPC | 线程间通信 |
|---|---|
| 管道 | 共享内存 |
| 消息队列 | volatile / synchronized |
| 共享内存 | Lock / Condition |
| Socket | wait / notify |
| 信号 | ThreadLocal |
线程通信快,但更容易出现:
竞态条件
死锁
可见性问题
| 场景 | 影响范围 |
|---|---|
| 进程 A 崩溃 | 不影响进程 B |
| 线程 1 崩溃 | 整个进程可能退出 |
原因:
线程共享地址空间,一个线程非法访问内存,整个进程会被 OS kill。
进程是资源分配的单位,线程是 CPU 调度和执行的单位;
进程之间相互独立,线程共享进程资源,线程更轻量但风险更高。