java學習5---Java 的多線程,程序、進程和線程的概念

1、程序,進程,線程的概念

程序是計算機指令集,它以文件的形式存儲在計算機磁盤上。

進程是程序在自身地址空間運行的活動,是資源申請,調度和獨立運行的單位。一個程序可以由多個進程。

線程:是進程中單一的連續的控制流程,一個進程由多個線程組成。線程是輕量級的進程,它和進程一樣擁有獨立的控制流程,區別在它,沒有獨立的存儲空間而是和它所屬的進程的其他線程共享一個存儲空間,這使得線程間的通訊較進程簡單。

2、java對多線程的支持

在java中實現多線程有兩種方式:

a、繼承Thread類

b、實現Runnable接口

線程都擁有時間片,在運行一段時間後進行彼此的切換。

後臺線程:利用線程的方法setDaemon(),且必須在線程啓動前調用此方法。

yield() 方法可以使得線程放棄執行權利,暫停一下,允許其他線程執行。

線程的優先級

3、java對於多線程的支持

java程序在運行過程實現一個用於線程調度的線程調度器,用來確定某一時刻由那個線程在cpu上運行。

java中線程的調度不是採用時間片輪換模式,而是採用搶佔式調度模型,高優先級的線程可以搶佔低優先級的

java運行時所在的操作系統支持時間片輪換,那麼線程調度器支持相同優先級的時間片輪換。

4、繼承Thread類與實現Runnable接口選擇

使用實現Runnable接口的2個好處:1、java不允許多繼承,這時就得實現接口,2、用接口實現多線程,對於多線程要訪問同一資源是很方便(可以調用Thread(Runnable 對象)的構造函數,可以構建同一對象的多個線程)

5、線程的同步

多線程共同訪問某一個代碼段,我們稱爲臨界區。

同步有2種實現方式:同步塊和同步方法。

同步的機制是鎖,java中每個對象都有一個監視器,或者稱爲鎖。線程進入程序塊變進行加鎖操作。

同步塊需要對象即在同步的塊前加Synchronized (object) 

同步方法即把同步塊放到方法中封裝,方法要申明爲synchronized。

同步方法的機制是當線程進入方法時它會查看this沒有加鎖,如果沒有則加鎖操作。

每個class也喲一個鎖,是這個class對象所對應的Class對象的鎖。

6、wait,notify ,notifyall

每個對象除了有一個鎖之外,還有一個等待隊列,當一個對象被創建時,它的等待隊列是空的。

我們應該在當前線程鎖住對象的鎖之後,去調用對象的wait方法,即wait方法只能在同步塊和同步方法中使用。

當調用對象的notify方法時,將從對象的等待隊列中刪除一個任意選擇的線程,這個線程將再次成爲可以運行的線程。

當調用對象的notifyall方法時,將從對象的等待隊列中刪除所有的線程,這些線程將再次成爲可以運行的線程。

wait和notify主要用於生產者--消費者的關係中。

7、線程的終止

a、設置一個flag變量

b、調用

 

 

 

 

發佈了17 篇原創文章 · 獲贊 8 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章