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。为什么在...
您对LockSupport.getBlocker(Thread t)
方法的理解是正确的。但是,您的用法可能是错误的,因为您在lock
方法中传递了与park
不同的对象。