为什么所有线程都获得锁定?

时间:2017-03-22 06:08:33

标签: java multithreading

我只是在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(); } } ,它工作正常。谢谢你前进。

1 个答案:

答案 0 :(得分:3)

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

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

通过以上更改,您获得以下输出: First-Thread get lock. get lock failed