多線程

三種線程池的特點及範圍:

1-繼承Thread類,重寫父類run()方法。

2-實現runnable接口。

3-使用Executor Service。


多線程同步機制:

1-在需要同步的方法中加入synchronized關鍵字。

同步方法,synchronized在方法上;同步代碼塊,synchronized在代碼塊上。

2-使用lock鎖對象。鎖是對象的。JDK5,java.util.concurrent.lock包。

監視器和鎖在Java虛擬機一塊使用。監視器監視一塊同步代碼塊,確保一次只有一個線程執行同步代碼塊。

每一個監視器都和一個對象引用相關聯,線程獲取鎖之前不允許執行同步代碼塊。

3-流程:

拿到lock鎖執行權限(一個對象一把鎖

---->無鎖---->等待隊列(線程阻塞)

---->有鎖---->執行同步代碼塊sychronized---->執行完把鎖還給同步對象

4-保證同步代碼在同一時刻只有一個線程在執行。


啓動線程用start(),可運行狀態。

run()方法可以產生必須退出的標識來停止一個線程。


線程的幾種可用狀態:

Runnable-就緒:線程準備運行,不一定立馬開始。

Running-運行中:進程正在執行線程的代碼。

Waiting-等待中:線程阻塞。wait():Object類的方法,釋放鎖對象,notify()線程進入對象鎖定池。

Sleeping-睡眠中。sleep():Thread線程類的方法,不釋放鎖對象,暫停時間到自動恢復。

Blocked on I/O-IO阻塞:等待IO操作完成。

Blocked on Synchronization-同步阻塞:等待獲取鎖。

Dead-死亡:線程完成執行。


死鎖:

1-兩個進程都在等待對方執行完畢才能繼續往下執行時發生死鎖。

2-強制線程按照指定的順序獲取鎖,可以確保N個線程可以訪問N個資源的同時不發生死鎖。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章