我只是在Java中学习多线程。我正在使用jdk1.8。遇到ReentrantLock
的{{1}}。
以下是我的代码:
tryLock(long timeout,@NotNull java.util.concurrent.TimeUnit unit)
我的问题是:为什么所有的First-Thread和Second-Thread都获得了锁定?tyrLock()是不是意味着在指定的时间内获得锁定?
例如,First-Thread获取锁定然后保持6秒钟。同时Second-Thread将无法在4秒内获得锁定。但结果不是我的逻辑推理。
我只是尝试使用没有参数的public class TimeLock implements Runnable {
static ReentrantLock lock = new ReentrantLock();
@Override
public void run() {
try {
if (lock.tryLock(4000, TimeUnit.SECONDS)) {
System.out.println(Thread.currentThread().getName() + " get lock.");
Thread.sleep(6000);
} else {
System.out.println("get lock failed");
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
if (lock.isHeldByCurrentThread()) {
lock.unlock();
}
}
}
public static void main(String[] args) {
TimeLock timeLock = new TimeLock();
Thread t1 = new Thread(timeLock, "First-Thread");
Thread t2 = new Thread(timeLock, "Second-Thread");
t1.start();
t2.start();
}
}
,它工作正常。谢谢你前进。
答案 0 :(得分:3)
在lock.tryLock(4000, TimeUnit.SECONDS)
语句中,您指定4000秒,而不是4秒
将时间单位更改为 TimeUnit.MILLISECONDS 或将值更改为 4 以生成预期用例。
通过以上更改,您获得以下输出:
First-Thread get lock.
get lock failed