創建多線程的幾種方式,線程死鎖如何產生,如何防止線程死鎖現象


方式:
  繼承Thread重新run方法 實現Runnable接口 實現Callable 接口
擴充:
  Callable 和 Runnable 區別:
  runnable 沒有返回值,callable可以拿到返回值。
  callable 可以看做是runnable 的補充

產生:
  一個資源只能被一個進程使用
  一個進行因多次請求造成阻塞,依然對已訪問的資源保持不放
  進程已經獲取到資源的使用權,但是一直未使用
  同一個進程,頻繁的獲取資源的使用權,一直未釋放
防止:
  加鎖順序(線程按照一定的順序加鎖)
  加鎖時間(線程嘗試獲取鎖的時候,加上一定的時間,超過時間限制,則放棄對資源的鎖)
  死鎖檢測(一般是吧所有的鎖,都放在map中,檢測map中的鎖)
擴充:
  線程和進程的區別:
    一個程序至少有一個進程,一個進程至少有一個線程;一個進程也可以有多個線程,來增加程序的執行速度。
  守護線程是什么:
    守護線程就是后台的一種特例進程,它獨立於控制終端,並且周期性的執行某種任務,或者等待處理某些事情發生的事件,在java種
  垃圾回收就是一種特殊的守護線程。
線程有哪些狀態:
  new 尚未啟動
  Runnable 正在執行
  blooked 阻塞的,(被同步鎖,或者io鎖阻塞)
  waiting 永久等待狀態
  time_waiting 等待指定時間,重新被喚醒的狀態
  terminated (吹美內特) 執行完成
sleep 和 wait 的區別:
  類的不同:sleep 來自Thread wait 來自Object
  釋放鎖: sleep不需要釋放鎖,wait需要手動釋放
  用法不同: sleep 時間到了之后自動喚醒, wait 可以使用 notify() notifyAll()直接喚醒。
notify 和 notifyAll 區別
  notifyAll 喚醒所有的等待線程,notify喚醒一個
  notifyAll 調用后,將全部等待的線程由等待池,移動到鎖池,然后參與鎖的競爭,競爭成功者則繼續執行,如果未成功則繼續留在鎖池,等待鎖釋放之后繼續競爭。
  notify 喚醒一個,具體是哪一個,這個由虛擬機控制。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM