关于Java中的LockSupport.getBlocker(Thread t)的问题

问题描述 投票:1回答:2
LockSupport.getBlocker(Thread t)

返回提供给尚未取消阻止的park方法的最新调用的阻止程序对象;如果未阻止,则返回null。>

为什么此代码中的打印输出输出不同的对象?我是否误解了LockSupport.getBlocker(Thread t)


public static void main(String[] args) throws InterruptedException {
    Object lock = new Object();
    Thread t1 = new Thread(() -> {
        System.out.println("sub thread lock = " + lock);
        LockSupport.park(new Object());
    });
    t1.start();
    Thread.sleep(5000);
    Object getBlocker = LockSupport.getBlocker(t1);
    System.out.println("main thread blocker = " + getBlocker);
    System.out.println("is blocker same ? " + getBlocker == lock);
    LockSupport.unpark(t1);
    t1.join();
}

输出:

sub thread lock = java.lang.Object@6edf6345
main thread blocker = java.lang.Object@77459877
false

LockSupport.getBlocker(Thread t)返回提供给尚未取消阻止的park方法的最新调用的阻止程序对象;如果未阻止,则返回null。为什么在...

java java.util.concurrent
2个回答
0
投票

0
投票

您对LockSupport.getBlocker(Thread t)方法的理解是正确的。但是,您的用法可能是错误的,因为您在lock方法中传递了与park不同的对象。

© www.soinside.com 2019 - 2024. All rights reserved.