運行結果:
說明: 本程序先執行park,然后在執行unpark,進行同步,并且在unpark的前后都調用了getBlocker,可以看到兩次的結果不一樣,并且第二次調用的結果為null,這是因為在調用unpark之后,執行了Lock.park(Object blocker)函數中的setBlocker(t, null)函數,所以第二次調用getBlocker時為null。 上例是先調用park,然后調用unpark,現在修改程序,先調用unpark,然后調用park,看能不能正確同步。
具體代碼如下:
運行結果:
說明: 可以看到,在先調用unpark,再調用park時,仍能夠正確實現同步,不會造成由wait/notify調用順序不當所引起的阻塞。因此park/unpark相比wait/notify更加的靈活。