JAVA基础:Lock锁
目录
前言
Lock的使用过程
前言
因为synchronized锁在使用时存在着一定的不足,所以在jdk1.5时,提供了一个java 并发 工具包。里面包含了许多与多线程操作相关的工具类,其中就包含了Lock系列
Lock的使用过程
Lock本身是一个接口,我们实际应用时使用其对应的子类ReentrantLock
创建锁对象。 如果多个线程需要争抢一把锁,就创建一个锁对象。 需要多个锁,就创建多个锁对象
调用lock对象的lock()
尝试争抢锁。 如果抢不到锁,线程进入等待状态。
调用lock对象的unlock()
,释放锁。 其他等待锁的线程才能继续争抢。
使用tryLock(10,TimeUnit.SECONDS)方法可以
尝试在指定的时间内获得锁。返回boolean
如果指定时间没有获得锁就向下执行其他的代码
static final Lock lock = new ReentrantLock();
public static void t1(){lock.lock();for (int i = 1; i <= 10; i++) {System.out.println(Thread.currentThread().getName() + " : " + i);}lock.unlock();
}
在使用lock锁,建议将获得锁的代码写在try中,将释放锁的代码写在finally中确保无论操作是否成功还是是否,都能释放锁。
否则如果代码在执行过程中发生异常程序中断就不会释放锁了,其他线程就无法执行代码
try{lock.lock();...
}finally{lock.unlock();
}