**java同步線程(三)**? ? ? ? ? ? ? ? ?
? 基本實現(xiàn)方式及同步原理---釋放同步監(jiān)視器的鎖定任何線程進入同步代碼塊之前誓沸,必須先獲得對同步監(jiān)視器的鎖定梅桩,那么何時會釋放監(jiān)視器的鎖定呢?
1拜隧、當(dāng)前線程的同步方法宿百、同步代碼塊執(zhí)行結(jié)束,當(dāng)前線程即釋放同步監(jiān)視器洪添。
2垦页、當(dāng)前線程在同步代碼塊、同步方法中遇到break干奢、return終止了該代碼塊痊焊、該方法的繼續(xù)執(zhí)行,當(dāng)前線程會釋放同步監(jiān)視器忿峻。
3薄啥、當(dāng)前線程在同步代碼塊、同步方法中出現(xiàn)了未處理的Error或Exception,導(dǎo)致了該代碼塊、該方法異常結(jié)束時肾请,當(dāng)前線程將會釋放同步監(jiān)視器蔼夜。
4、當(dāng)前線程執(zhí)行同步代碼塊或同步方法時用狱,程序執(zhí)行了同步監(jiān)視器對象的wait()方法笔呀,則當(dāng)前線程暫停偶器,并釋放同步監(jiān)視器觉壶。
如下所示的情況下枷踏,線程不會釋放同步監(jiān)視器。
1掰曾、線程執(zhí)行同步代碼塊或同步方法時旭蠕,程序調(diào)用Thread.sleep()、Thread.yield()方法來暫停當(dāng)前線程的執(zhí)行旷坦,當(dāng)前線程不會釋放同步監(jiān)視器掏熬。
2、線程執(zhí)行同步代碼塊時秒梅,其他線程調(diào)用了該線程的suspend()方法將該線程掛起旗芬,該線程不會釋放同步監(jiān)視器。當(dāng)然捆蜀,我們應(yīng)該盡量使用suspend()和resume()方法來控制線程疮丛。