Java:请教这段代码中 lock 的究竟是哪个对象

发布于 2022-09-12 13:10:16 字数 1230 浏览 19 评论 0

public class Solution {
    public static void main(String[] args) {
        Lock lock = new ReentrantLock();
        Thread t1 = new Thread(()->{
            try {
                lock.lock();
                System.out.println("线程一启动");
                TimeUnit.SECONDS.sleep(Integer.MAX_VALUE);
                System.out.println("线程一结束");
            } catch (InterruptedException e) {
                System.out.println("线程一中断");
            } finally {
                lock.unlock();
            }
        }); 
        Thread t2 = new Thread(()->{
            try {
                lock.lock();
                System.out.println("线程二启动");
                TimeUnit.SECONDS.sleep(5);
                System.out.println("线程二启动");
            } catch (InterruptedException e) {
                System.out.println("线程二中断");
            } finally {
                lock.unlock();
            }
        }); 
        t1.start();
        t2.start();
        try {
            TimeUnit.SECONDS.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        t2.interrupt();
    }
}

程序输出结果仅有【线程一启动】,线程二不会被执行
请教在线程 t1 中的 lock.lock() 究竟是锁的哪个对象?没看到程序里有显式声明对象

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

捂风挽笑 2022-09-19 13:10:16

请教在线程 t1 中的 lock.lock() 究竟是锁的哪个对象?

Lock lock = new ReentrantLock();

这个不是吗?

lambda表达式可以访问调用者的局部变量。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文