java —— lock和synchronized

lock和synchronized区别:

    1)Lock是一个接口, 而synchronized是Java中的关键字,是内置的语言实现。

    2)在发生异常时,synchronized会自动释放锁,Lock必须手动调用unLock()释放锁,否则会造成死锁。因此使用Lock时需要在finally块中释放锁。

    3)Lock可以让等待锁的线程响应中断,线程可以中断去干别的事务,而synchronized却不行,使用synchronized时,等待的线程会一直等待下去,不能够响应中断;

    4)通过Lock可以知道有没有成功获取锁,而synchronized却无法办到;

    5)Lock可以提高多个线程进行读操作的效率。

 

ReentrantLock

    重入锁。是Lock的实现类。

    重入锁简单理解就是对同一个线程而言,它可以重复的获取锁。例如这个线程可以连续获取两次锁,但是释放锁的次数也一定要是两次。

    ReentrantLock支持两种获取锁的方式,一种是公平锁,一种是非公平锁。如果是公平锁,则分先来后到的获取锁,如果是非公平锁则谁抢到锁算谁的,这就相当于排队买东西和不排队买东西是一个道理。Java的synchronized关键字就是非公平锁。ReentrantLock默认是非公平锁,但是可以设置公平锁。

    常用方法:构造---new ReentrantLock(), lock()获得锁       unlock()释放锁

你可能感兴趣的:(java)