lock()、trylock()、trylock(long time, timeunit unit) 和 lockinterruptibly()都是用来获取锁的。
(1)lock()方法是平常使用得最多的一个方法,就是用来获取锁。如果锁已被其他线程获取,则进行等待。
(2)trylock()方法是有返回值的,它表示用来尝试获取锁,如果获取成功,则返回true,如果获取失败(即锁已被其他线程获取),则返回false,也就说这个方法无论如何都会立即返回。在拿不到锁时不会一直在那等待。
(3)trylock(long time, timeunit unit)方法和trylock()方法是类似的,只不过区别在于这个方法在拿不到锁时会等待一定的时间,在时间期限之内如果还拿不到锁,就返回false。如果如果一开始拿到锁或者在等待期间内拿到了锁,则返回true。
(4)lockinterruptibly()方法比较特殊,当通过这个方法去获取锁时,如果线程正在等待获取锁,则这个线程能够响应中断,即中断线程的等待状态。也就使说,当两个线程同时通过lock.lockinterruptibly()想获取某个锁时,假若此时线程a获取到了锁,而线程b只有在等待,那么对线程b调用threadb.interrupt()方法能够中断线程b的等待过程。
2.实例
以trylock为例。
lock lock = ...;if(lock.trylock()) { try{ //处理任务 }catch(exception ex){ }finally{ lock.unlock(); //释放锁 }}else { //如果不能获取锁,则直接做其他事情}
以上就是java中lock获取锁的方法有哪些的详细内容。