同步机制之 ReentrantLock
ReentrantLock实现了Lock接口
Lock lock = new ReentrantLock();
lock(),调用后尝试获取锁,如果锁被占用了,则进入阻塞状态等待,类似于synchronized的作用,直到获取锁后才继续执行下面的方法,Thread.interrupt()是无法中断它的等待的。
lockInterruptibly(),作用和lock基本相同,不同的是:Thread.interrupt()会抛出异常使它中断等待。
ps.其实看方法就知道
void lockInterruptibly() throws InterruptedException;
这里抛出了InterruptedException异常,也就是可以被中断的,之后的几个方法同理。
tryLock(),不阻塞地获取锁,获取成功返回true,否则返回false,无论成不成功都不会阻塞
boolean tryLock();
tryLock(long time,TimeUnit unit) ,指定一段时间尝试获取锁,获取成功返回true,否则返回false,可以被Thread.interrupt()中断。
boolean tryLock(long time, TimeUnit unit) throws InterruptedException;
unlock() 释放锁
void unlock();
Condition newCondition(); 提供等待或者唤醒的多种方法,所有方法都要再当前线程获取了锁的前提下调用,否则抛出异常
class MyCondition implements Condition{ //休眠等待直到:single、interrupt @Override public void await() throws InterruptedException { // TODO Auto-generated method stub } //休眠等待直到:single @Override public void awaitUninterruptibly() { // TODO Auto-generated method stub } //休眠等待直到:single、interrupt、时间到 //返回值 剩余的等待时间 @Override public long awaitNanos(long nanosTimeout) throws InterruptedException { // TODO Auto-generated method stub return 0; } //休眠等待直到:single、interrupt、时间到 @Override public boolean await(long time, TimeUnit unit) throws InterruptedException { // TODO Auto-generated method stub return false; } //休眠等待直到:single、interrupt、时间到 @Override public boolean awaitUntil(Date deadline) throws InterruptedException { // TODO Auto-generated method stub return false; } //发出信号唤醒 @Override public void signal() { // TODO Auto-generated method stub } //发出信号唤醒 @Override public void signalAll() { // TODO Auto-generated method stub } }

浙公网安备 33010602011771号