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