java中的lock接口总包含哪些方法?
lock接口使用的时候要显式的获取锁和释放锁,获取锁和释放锁的操作可以中断获取或者是超时获取锁,reentrantlock是lock接口的实现类
void lock()
加锁
void unlock()
释放锁
boolean tryLock()
尝试获取锁,如果获取锁成功返回true,如果锁已经被其他线程获取则获取失败,返回false,使用这个方法的时候,在拿不到锁的时候不会一直等待,能够立即返回,尝试非阻塞的获取锁
boolean tryLock(long time,TimeUnit unit)throws InterruptedException,
尝试获取锁,如果获取锁成功返回true,如果锁已经被其他线程获取在拿不到锁的时候不会立即返回而是会等待一段时间,如果在等待的时间内还是拿不到锁,则返回false,如果在等待时间内拿到了锁则返回true
void lockInterruptibly() throw InterruptedException
通过这个方法获取锁,如果线程没有立即获取到锁正在等待获取锁,则这个线程能够响应中断,可以中断线程的等待状态。比如,两个线程都调用了lockinterruptibly()方法的时候,如果A线程获取到了锁,B线程就处在等待状态,在线程A的执行过程中调用了ThreadB.interrupt()方法,则线程B的等待状态将会被中断。对于synchronized修饰的方法或者是同步代码块来说,如果线程处于等待状态,则这个线程无法被中断,只能一直等待下去。需要注意的是,lockinterruptibly()方法的声明中抛出了异常,因此lockinterruptibly()方法必须要放在try代码块中或者在调用这个方法的方法中声明抛出异常interruptedException
Condition newCondition()
总结:
lock接口的加锁和解锁是显式的,lock接口中的trylock()能够尝试非阻塞的获取锁,如果锁已经被其他线程拥有就获取不到返回false,lock接口的trylock(time)能够超时获取锁,在指定的一段时间内获取锁,如果在等待时间内获取锁成功将返回true,获取锁失败将返回false,lock接口中的lockinterruptibly()能够中断获取锁,当线程没有获取到锁处于等待状态的时候,能够响应中断,如果线程已经获取到了锁是不会被interrupt()方法中断的