吃透Java并发八:locks之 Lock、ReadWriteLock、Condition接口

一、Lock接口

在JDK1.5之前,我们加锁只能通过synchronized关键字。在多线程情况下,一段代码被synchronized关键字修饰,那么同一时刻只能被一个线程访问,其它线程都必须等待该线程释放锁之后才有机会获取锁进入代码块。
持有synchronized锁的线程释放锁有如下两种情况:
1、代码块执行完毕释放锁。
2、执行代码块的线程抛出异常释放锁。

假如一个线程执行IO操作或者Sleep一直阻塞没有去释放锁的话,那么其它想要获取锁的线程就要一直阻塞等待下去,这种情况是非常浪费系统资源的,有可能造成程序崩溃。

那么有没有办法避免这种情况呢?在JDK1.5 Doug Lea大神加入了Lock接口,我们下面来看一下Lock接口:

Lock接口可以视为synchronized的增强版,提供了更灵活的功能。该接口提供了非阻塞、可中断、超时地获取锁等功能。

public interface Lock {

    //最常用的获取锁的方法,若锁被其它线程获取,则等待阻塞。
    void lock();
	//可中断地获取锁,该方法可响

猜你喜欢

转载自blog.csdn.net/u013277209/article/details/103382077