1、AtomicIntger的实现原理。
答:CAS自旋。
2、synchronized和ReentrantLock的区别。
答:synchronized是属于java同步机制的一个关键字,而ReentrantLock是一个实现同步的java对象,一个可重入的互斥锁。
3、什么是死锁,如何避免死锁?(n个线程在访问n个资源的同时如何避免死锁?)
答:死锁就是两个或两个以上的进程(线程)因争夺资源而造成的一种相互等待的现象,若无外力作用,等待将一直进行下去。
发生死锁有四个必要条件,缺一不可
(1)互斥条件:某资源只能被一个进程(线程)占有;
(2)不可抢占:进程A所获得的资源在未释放之前,其他进程不能强行夺取;
(3)占有且申请:进程在占有资源A的同时还能申请资源B
(4)循环等待:线程1在占有资源A的同时等待资源B,线程2在占有资源B的同时等待资源A,这就造成了循环等待。
预防死锁就要破坏发生死锁的条件,将其四个必要条件破坏其一即可,其中最简单直接的就是破坏循环等待条件,具体做法就是:给所有的资源编号,强制进程(线程)按照顺序占用资源(比如从大到小获取资源)。
相关文章
- python 之 并发编程(进程池与线程池、同步异步阻塞非阻塞、线程queue)
- Java多线程与高并发专题——Condition 和 wait/notify的关系
- python 并发编程之多线程的缺点 (对比JAVA多线程)
- Java并发编程示例(五):线程休眠与恢复
- C++并发编程(四)同步与异步
- Python 实用技巧:如何使用 Python 进行多线程与多进程编程加速任务执行
- Java并发编程:理解多线程并发问题及其解决方法
- Linux select TCP并发服务器与客户端编程
- C++并发编程之提高C++多线程应用可测试性的思想和方法
- 【Java并发编程】之六:Runnable和Thread实现多线程的区别(含代码)