首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么所有的线程都有锁?

为什么所有的线程都有锁?
EN

Stack Overflow用户
提问于 2017-03-22 06:08:32
回答 1查看 49关注 0票数 1

我只是在Java.And中学习多线程,我正在使用The 1.8 .Just,遇到ReentrantLocktryLock(long timeout,@NotNull java.util.concurrent.TimeUnit unit),下面是我的代码:

代码语言:javascript
复制
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。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-22 06:17:58

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

要么将时间单元更改为TimeUnit.MILLISECONDS,要么将值更改为4以生成预期的用例。

通过上面的更改,您得到的输出如下:First-Thread get lock. get lock failed

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42943940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档