概述
tryLock(long time, TimeUnit unit)方法和tryLock()方法是类似的,只不过区别在于这个方法在拿不到锁时会等待一定的时间,在时间期限之内如果还拿不到锁,就返回false。如果一开始拿到锁或者在等待期间内拿到了锁,则返回true。
代码
@Test
public void testTryLock2() throws Exception {
Lock lock = new ReentrantLock();
new Thread() {
@Override
public void run() {
String tName = Thread.currentThread().getName();
try {
//获取不到锁,就等7秒,如果7秒后还是获取不到就返回false
if (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() {
@Override
public void run() {
String tName = Thread.currentThread().getName();
try {
//获取不到锁,就等7秒,如果7秒后还是获取不到就返回false
if (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释放锁!!