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

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() 究竟是锁的哪个对象?没看到程序里有显式声明对象

阅读 1.5k
1 个回答

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

Lock lock = new ReentrantLock();

这个不是吗?

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进