ReentrantLock和Synchronized的区别

ReentrantLock lock=new ReentrantLock ();

1.ReentrantLock 是一种重入锁的实现。它的特点就是必须的手动开启锁和释放锁。尤其是释放锁,不能忘记,否则程序则会一直阻塞。与Synchronized不同的是Synchronized在遇到异常的时候就会释放锁,但是ReentrantLock在异常下是不会释放锁的,因此经常在finally中进行锁的释放。

2.  locked = lock.tryLock(5, TimeUnit.SECONDS);尝试去获得锁,如果5秒还是没有获得到那么就会向下是执行。

3.ReentrantLock 是可以被打断的锁,如果一段代码被lock.lockInterruptibly()锁住,那么他能够被t2.interrupt();这样的语句去手动打断。

4.公平锁与不公平锁,通常来说Synchronized的锁是一种不公平的锁,而ReentrantLock可以实现公平锁。不公平指的是,就是由于随机化的原因有的线程会由于运气不好久久得不到执行。公平就是使用了一种时间上的调度算法来使得每个线程的都能够得到公平的执行。

你可能感兴趣的:(ReentrantLock和Synchronized的区别)