線程相關的Demo

線程相關的Demo

一:多線程的兩種方式

1.線程與進程

  進程是一個執行的程序

  線程則是屬於進程的一個控制單元。

2.多線程的第一種方式

  繼承Thewad類。

  run的作用:多線程存儲程序的地方

  start的作用:開啓線程,同時,調用run方法。

3.第一種方式的線程程序

  

4.第二種方式,實現接口

  .

5.兩種方式的比較

  第二種方式:避免了單繼承的侷限性。

   兩種方式的線程代碼存放位置不同:

    繼承Thread的線程代碼放在Thread的子類run的方法中。

    實現Runnable,線程代碼存在接口的子類的run方法中。

 

二:多線程的安全問題

6.同步代碼塊

  

7.同步函數

  使用的鎖是this。

  

8. 使用同步函數實現賣票程序

  需要把要同步的代碼另外移植到一個函數中,因爲,直接在函數上同步上,while不會跳出來,就是說一個線程一直運行到底。

  

9.靜態同步函數的鎖

  靜態進入內存後,內存沒有本類對象,但是一定該類對應的字節碼文件對象

  類名.class。

10.懶漢式單例模式下的線程安全

  

11.死鎖程序

  兩個鎖互相鎖。

  

  

 

三:通訊

12.單線程間通訊

  

  

  

13.單線程間通訊的優化

  一些方法可以放在Resource中。

  

  

  

14.多線程間多通訊

  

  

  

多生產者消費者問題中(既該案例),一開始對用while還是if概念比較模糊,經過分析後總結如下: while進入一個線程之後執行wait(100),立刻釋放鎖,接着其它線程執行set或者out,如果執行了out,那麼當前線程則會跳出循環(out會將flag改爲false跳出循環),執行後續代碼。 if 進入一個線程之後執行wait(100),立刻釋放鎖,接着其它線程執行set或者out,如果執行了out,那麼等當前線程(假設爲A)wait之後的下一個線程進入set再經過判斷才能執行後面的代碼。 如果當時wait的線程(A線程)再次被啓動會接着當時的代碼繼續執行,這樣導致生產者會生產多次數據在消費者還未消費的情況下。

15.同步的lock鎖的使用

  

  

  

16.守護進程

  主進程結束後,其他前程也跟着結束

  

17.停止進程

  

18.join方法。

  

 

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