怎么检测一个线程是否持有对象监视器面试
我也是在网上看到一道多线程面试题才知道有方法能够判断某个线程是否持有对象监视器:Thread类提供了一个holdsLock(Object obj)方法,当且仅当对象obj的监视器被某条线程持有的时候才会返回true,注意这是一个static方法,这意味着"某条线程"指的是当前线程。例如:多线程
Object o = new Object(); @Test public void test1() throws Exception { new Thread(new Runnable() { @Override public void run() { synchronized(o) { System.out.println("child thread: holdLock: " + Thread.holdsLock(o)); } } }).start(); System.out.println("main thread: holdLock: " + Thread.holdsLock(o)); Thread.sleep(2000); }
main thread: holdLock: false child thread: holdLock: true
https://mp.weixin.qq.com/s/e6NmfkvKdzCtOwJB5umrGAide