Java程序設計案例教程(第2版)課件 11.4.3 線程死鎖問題_第1頁
Java程序設計案例教程(第2版)課件 11.4.3 線程死鎖問題_第2頁
Java程序設計案例教程(第2版)課件 11.4.3 線程死鎖問題_第3頁
Java程序設計案例教程(第2版)課件 11.4.3 線程死鎖問題_第4頁
Java程序設計案例教程(第2版)課件 11.4.3 線程死鎖問題_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

浙江經貿職業(yè)技術學院多線程Java語言程序設計Unit11主講呂麗華11.4.1多線程問題11.4.3線程死鎖問題11.4.4volatile字段11.4線程同步11.4.2synchronized關鍵字11.4.5CountDownLatch字段11.4.3線程死鎖問題舉例一個線程需要鎖定兩個對象才能完成,線程1擁有對象A的鎖,線程1如果再擁有對象B的鎖就能完成操作,線程2擁有對象B的鎖,線程2如果再擁有對象A的鎖就能完成操作。困境很不幸的是線程1執(zhí)行不下去了,因為線程1等待的資源對象B被線程2鎖住了,線程2也執(zhí)行不下去了,因為線程2等待的資源對象A被線程1鎖住了,這樣就造成了死鎖。使用互斥鎖容易產生死鎖問題11.4.3線程死鎖問題1生產者與消費者問題在一個果園里,有農夫和小孩,農夫會不停的采摘水果放入果園中心的一個水果筐直到水果筐滿,而小孩會不停的從水果筐里拿水果來吃,直到水果拿完。實例農夫可以看成是一個生產者的線程,小孩可以看成是一個消費者的線程,而大水果筐是共享資源。模型分析11.4.3線程死鎖問題1生產者與消費者問題用Java程序的多線程的代碼示例,表示上述的生產者與消費者問題。知識應用11.4.3線程死鎖問題2wait()方法如果生產的速度大于消費的速度就會導致功大于求,水果筐很容易就滿了,然而生產者又一直抱著水果筐不放,沒有機會給消費者使用,消費者不消費生產者就無法生產,所以就造成了死鎖。實例說明死鎖會出現么?在兩個同步互斥方法中用到了wait和notify方法,這兩個方法是為了防止死鎖的。wait是Object類的方法,它的作用是擁有互斥鎖的線程放棄鎖的使用權,進入wait池進行等待,那么互斥鎖就有可能被其他線程獲得以執(zhí)行其他任務。怎么解決?11.4.3線程死鎖問題3notify()方法notify()也是Object類的方法,它的作用是從wait池中喚醒一條正在等待的線程進入就緒狀態(tài),被喚醒的這條線程就很可能重新獲得cup和互斥鎖來完成它的任務。4notifyAll()方法notifyAll()和notify()很相似,它是從wait()池中喚醒所有正在等待的線程進入就緒狀態(tài)。

注意:以上三個方法都只能在synchronized方法中應用,否者會出現下面的異常信息:IllegalMonitorStateException:currentthreadnotowner。11.4.3線程死鎖問題舉例說明生產者和消費者的關系以及如何避免死鎖問題。知識應用

11.4.3線程死鎖問題5終止線程

終止線程終止線程也就是將線程的狀態(tài)轉換為死亡狀態(tài),死亡狀態(tài)是線程生命周期中的最后一個階段。

線程死亡的原因一個原因是正常運行的線程完成了它的全部工作;另一個原因是線程被強制性地終止,如通過執(zhí)行stop或destroy方法來終止一個線

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論