[关闭]
@chenxuxiong 2016-05-23T09:19:13.000000Z 字数 601 阅读 457

java中的锁

JAVA基础


(1)可重入锁:某个线程调用了某个加锁的方法,还能够调用另外一个加了同一个锁的方法。可重入锁表明锁是根据线程而不是根据方法分配的
Synchronized和Lock都是可重入锁。

(2)可中断锁:顾名思义,就是可以相应中断的锁。这里的中断,是中断在等待锁的线程 ,而不是中断已经获得锁的线程。
Synchronized获得的是不可中断锁。
Lock通过interruptLock方法获得的是可中断的锁。

(3)公平锁即尽量以请求锁的顺序来获取锁。比如同是有多个线程在等待一个锁,当这个锁被释放时,等待时间最久的线程(最先请求的线程)会获得该所,这种就是公平锁。
非公平锁即无法保证锁的获取是按照请求锁的顺序进行的。这样就可能导致某个或者一些线程永远获取不到锁。
在Java中,synchronized就是非公平锁,它无法保证等待的线程获取锁的顺序。
而对于ReentrantLock和ReentrantReadWriteLock,它默认情况下是非公平锁,但是可以设置为公平锁

(4)读写锁将对一个资源(比如文件)的访问分成了2个锁,一个读锁和一个写锁。
正因为有了读写锁,才使得多个线程之间的读操作不会发生冲突。

ReadWriteLock就是读写锁,它是一个接口,ReentrantReadWriteLock实现了这个接口。
可以通过readLock()获取读锁,通过writeLock()获取写锁。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注