公平锁和非公平锁
公平锁
如果存在多个线程加锁时,只会有一个线程在工作其他线程不工作,效率高,发生饿死现象
非公平锁
各个线程间同时工作会相互询问是否有其他线程,如果有其他线程,那么当前线程会排队等待,效率相对低
可重入锁(递归锁)
可重入锁是某个线程已经获得某个锁,可以再次获取锁而不会出现死锁。再次获取锁的时候会判断当前线程是否是已经加锁的线程,如果是对锁的次数+1,释放锁的时候加了几次锁,就需要释放几次锁。(可以在加锁的代码块里面在加锁)
悲观锁和乐观锁
- 悲观锁:是指当执行任何操作时都要上锁其他操作都要进行等待。所有它相当于是串行执行,不支持并发,因此效率低
- 乐观锁:是指在执行一个操作时记录当前操作的版本号,当执行某个操作时除了执行相关读或者写后在进行更改版本号,这样其他操作与当前操作有冲突时会对比版本号是否一致,不一致则修改失败。
读锁和写锁
读锁:共享锁
写锁:排他锁