Java 为什么所有线程都有锁?
我正在学习Java中的多线程。我正在使用jdk1.8。只是遇到了Java 为什么所有线程都有锁?,java,multithreading,Java,Multithreading,我正在学习Java中的多线程。我正在使用jdk1.8。只是遇到了ReentrantLock的tryLock(长超时,@NotNull Java.util.concurrent.TimeUnit)。 以下是我的代码: public class TimeLock implements Runnable { static ReentrantLock lock = new ReentrantLock(); @Override public void run() {
ReentrantLock
的tryLock(长超时,@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();
}
}
我的问题是:为什么第一个线程和第二个线程都得到了锁?tyrLock()不是意味着在指定的时间内尝试获得锁吗
例如,第一个线程获得锁,然后保持6秒钟。同时,第二个线程不会在4秒钟内获得锁。但结果与我的逻辑推理不同
我只是尝试在没有参数的情况下使用lock.trylock()
,它工作正常。谢谢大家。在lock.trylock(4000,TimeUnit.SECONDS)
语句中,您指定了4000秒,而不是4秒
将时间单位更改为TimeUnit.millizes或将值更改为4以生成预期用例
通过上述更改,您可以获得以下输出:
第一个线程得到锁。
获取锁失败