1. 进程和线程的区别,进程间如何通信
进程:系统运行的基本单位,进程在运行过
程中都是相互独立,但是线程之间运行可以
相互影响
线程:独立运行的最小单位,一个进程包含
多个线程且它们共享同一进程内的系统资源
进程间通过管道、 共享内存、信号量机制、
消息队列通信
2. 什么是线程上下文切换
当一个线程被剥夺 cpu 使用权时,切换到另
外一个线程执行
3. 什么是死锁
死锁指多个线程在执行过程中,因争夺资源
造成的一种相互等待的僵局
4. 死锁的必要条件
① 互斥条件:同一资源同时只能由一个线
程读取
② 不可抢占条件:不能强行剥夺线程占有
的资源
③ 请求和保持条件:请求其他资源的同时
对自己手中的资源保持不放
④ 循环等待条件:在相互等待资源的过程
中,形成一个闭环
想要预防死锁,只需要破坏其中一个条件即可,
比如使用定时锁、尽量让线程用相同的加锁顺
序,还可以用银行家算法可以预防死锁
5. Synchrpnized 和 lock 的区别
① synchronized 是关键字,lock 是一个类
② synchronized 在发生异常时会自动释放
锁,lock 需要手动释放锁
③ synchronized 是可重入锁、非公平锁、
不可中断锁,lock 的 ReentrantLock 是
可重入锁,可中断锁,可以是公平锁也
可以是非公平锁
④ synchronized 是 JVM 层次通过监视器
实现的,Lock 是通过 AQS 实现的
6. 什么是 AQS 锁?
AQS 是一个抽象类,可以用来构造锁和同
步类,如 ReentrantLock,Semaphore,
CountDownLatch,CyclicBarrier
AQS 的原理是,AQS 内部有三个核心组件:
①