同步特性使用起來非常友善,功能很強大。但有的時候考慮不周的話有可能出現線程死鎖。死鎖主要是多個線程争搶資源造成的。
下面通過一個例子示範死鎖:
運作結果:
線程1:資源1處理完畢等待資源2…
線程2:資源2處理完畢等待資源1…
程式說明:線程1和線程2共享資源res1和res2,當線程1首先運作擷取資源res1的鎖進而鎖住res1,調用sleep()使線程2得以運作,此時資源res1還未釋放。線程2鎖住資源res2,調用sleep(),線程1運作,此時資源res2還未釋放,線程1嘗試擷取資源res2但是已經被線程2鎖住,線程2睡眠過後開始運作嘗試擷取資源res1的鎖但是已經被線程1鎖住。此時線程1和線程2處于死鎖狀态。