概述
tryLock(long time, TimeUnit unit)方法和tryLock()方法是类似的,只不过区别在于这个方法在拿不到锁时会等待一定的时间,在时间期限之内如果还拿不到锁,就返回false。如果一开始拿到锁或者在等待期间内拿到了锁,则返回true。
代码
@Testpublic void testTryLock2() throws Exception {Lock lock = new ReentrantLock();new Thread() {@Overridepublic void run() {String tName = Thread.currentThread().getName();try {//获取不到锁,就等7秒,如果7秒后还是获取不到就返回falseif (lock.tryLock(7000, TimeUnit.MILLISECONDS)) {System.out.println(tName + "获取到锁!");} else {System.out.println(tName + "获取不到锁!");return;}} catch (Exception e) {e.printStackTrace();}try {for (int i = 0; i < 5; i++) {System.out.println(tName + ":" + i);}Thread.sleep(3000);} catch (Exception e) {System.out.println(tName + "出错了!!!");} finally {System.out.println(tName + "释放锁!!");lock.unlock();}}}.start();new Thread() {@Overridepublic void run() {String tName = Thread.currentThread().getName();try {//获取不到锁,就等7秒,如果7秒后还是获取不到就返回falseif (lock.tryLock(7000, TimeUnit.MILLISECONDS)) {System.out.println(tName + "获取到锁!");} else {System.out.println(tName + "获取不到锁!");return;}} catch (Exception e) {e.printStackTrace();}try {for (int i = 0; i < 5; i++) {System.out.println(tName + ":" + i);}} catch (Exception e) {System.out.println(tName + "出错了!!!");} finally {System.out.println(tName + "释放锁!!");lock.unlock();}}}.start();Thread.sleep(15000);//主线程}
运行结果
Thread-0获取到锁!
Thread-0:0
Thread-0:1
Thread-0:2
Thread-0:3
Thread-0:4
Thread-0睡觉......
Thread-0醒了......
Thread-0释放锁!!
Thread-1获取到锁!
Thread-1:0
Thread-1:1
Thread-1:2
Thread-1:3
Thread-1:4
Thread-1释放锁!!