我只是在Java.And中学习多线程,我正在使用The 1.8 .Just,遇到ReentrantLock的tryLock(long timeout,@NotNull java.util.concurrent.TimeUnit unit),下面是我的代码:
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();
}
}我的问题是:为什么所有的第一线程和第二线程都获得了锁? tyrLock()不意味着在指定的时间内获得锁吗?
例如,先线程获取锁,然后将其保存6 seconds.At,同时第二线程将无法在4 seconds.But中获得锁--结果与我的逻辑推理不同。
我只是尝试在没有参数的情况下使用lock.trylock(),它可以让您提前使用correctly.Thank。
发布于 2017-03-22 06:17:58
在lock.tryLock(4000, TimeUnit.SECONDS)语句中,可以指定4000秒,而不是4秒。
要么将时间单元更改为TimeUnit.MILLISECONDS,要么将值更改为4以生成预期的用例。
通过上面的更改,您得到的输出如下:First-Thread get lock. get lock failed
https://stackoverflow.com/questions/42943940
复制相似问题