关于多线程与并发编程

时间:2022-08-31 18:03:12

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,这就造成了循环等待。
预防死锁就要破坏发生死锁的条件,将其四个必要条件破坏其一即可,其中最简单直接的就是破坏循环等待条件,具体做法就是:给所有的资源编号,强制进程(线程)按照顺序占用资源(比如从大到小获取资源)。