1. 锁
1) Lock与synchronized的区别
Lock是接口,而synchronized是java中的关键字;
synchronized不会导致死锁现象发生,而Lock可能造成死锁现象;
Lock可以让等待锁的线程响应中断,而synchronized却不行;
通过Lock可以知道有没有成功获取锁,而synchronized却无法办到;
Lock可以提高多个线程进行读操作的效率;
在性能上来说,如果竞争资源不激烈,两者的性能差不多,而当竞争资源非常激烈时(即有大量线程同时竞争),此时Lock的性能要远远优于synchronized。
总结:这两者的使用在具体使用时要根据适当情况选择
2)公平锁
ReentrantLock 设置公平锁true
3) 非公平锁
ReentrantLock 默认非公平锁,吞吐量比公平锁大
4) 可重入锁(递归锁)
ReentrantLock
synchronized
5) 独占锁(写锁)/独享锁(读锁)/互斥锁
独占锁:指该锁只能被一个线程所有;
ReentrantLock
Synchronized
共享锁:指该锁可被多个线程所持有;
ReentrantReadWriteLock其读锁是共享锁,写锁是独占锁
读锁的共享锁可保证并发读是非常高效的,读写,写读,写写的过程是互斥的。
6)自旋锁
尝试获取锁的线程不会立即阻塞<