gpt4 book ai didi

java - 为什么所有线程都获得了锁?

转载 作者:行者123 更新时间:2023-11-29 04:33:12 25 4
gpt4 key购买 nike

刚学Java多线程,用的是jdk1.8,正好遇到ReentrantLocktryLock(long timeout,@NotNull java.util.concurrent.TimeUnit单位)。以下是我的代码:

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();
}
}

而我的问题是:为什么First-Thread和Second-Thread都获得了锁?tyrLock()不是指在指定时间内尝试获得锁吗?

比如First-Thread拿到锁后持有6秒,同时Second-Thread在4秒后没有拿到锁,但结果却不是我的逻辑推理。

我只是尝试使用不带参数的 lock.trylock(),它工作正常。谢谢你提前。

最佳答案

lock.tryLock(4000, TimeUnit.SECONDS) 语句中,您指定 4000 秒,而不是 4 秒

将时间单位更改为 TimeUnit.MILLISECONDS 或将值更改为 4 以生成预期的用例。

通过以上更改,您得到以下输出:
第一线程获得锁定。
获取锁失败

关于java - 为什么所有线程都获得了锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42943940/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com