併發面試彙總

怎麼檢測一個線程是否持有對象監視器面試

我也是在網上看到一道多線程面試題才知道有方法能夠判斷某個線程是否持有對象監視器: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

相關文章
相關標籤/搜索