1. 程式人生 > >為什麼要使用多執行緒?多執行緒的優點和缺點是什麼?

為什麼要使用多執行緒?多執行緒的優點和缺點是什麼?

首先說下多執行緒出現的原因:

為了解決負載均衡問題,充分利用CPU資源.為了提高CPU的使用率,採用多執行緒的方式去同時完成幾件事情而不互相干擾.為了處理大量的IO操作時或處理的情況需要花費大量的時間等等,比如:讀寫檔案,視訊影象的採集,處理,顯示,儲存等

多執行緒的好處:

1.使用執行緒可以把佔據時間長的程式中的任務放到後臺去處理

2.使用者介面更加吸引人,這樣比如使用者點選了一個按鈕去觸發某件事件的處理,可以彈出一個進度條來顯示處理的進度

3.程式的執行效率可能會提高

4.在一些等待的任務實現上如使用者輸入,檔案讀取和網路收發資料等,執行緒就比較有用了.

多執行緒的缺點:

1.如果有大量的執行緒,會影響效能,因為作業系統需要在它們之間切換.

2.更多的執行緒需要更多的記憶體空間

3.執行緒中止需要考慮對程式執行的影響.

4.通常塊模型資料是在多個執行緒間共享的,需要防止執行緒死鎖情況的發生

第三部分---------------Java中的執行緒------------------

1、        什麼是程序?

答案:程序其實就是一個靜態的概念。在機器上實際上執行的都是執行緒(執行緒,程序的一部分。)

2、        什麼是執行緒?

答案:執行緒是一個程式內部的順序控制流。一個程序裡面有一個主方法叫main方法。是一個程序裡面不同的執行路徑。

3、        什麼時候會用到執行緒?

答案:當系統中或者開發中。遇到高併發    並行的情況下為了解決負載均衡的問題,就會使用到執行緒。執行緒可以提高cpu的利用率。

4、        在一個時間點上。Cpu只能支援一個執行緒的執行(由於windows在一個程序中將多個執行緒執行速度非常的快。所以好多人認為是那是多執行緒。其實在同一個時間點上只有一個執行緒在執行)。

5、        注意:真正的多執行緒就是當你的機器為雙cpu或者是雙核的。那麼這個時候確實是真正的多執行緒在執行。

6、        Java的執行緒是通過java.long.thread類來實現的。

7、        一個新的執行緒需要兩步來執行@建立執行緒@啟動執行緒

8、        如何建立一個新的新的執行緒呢?

答案:Thread  t=new Thread();每建立一個新的

thread物件就相當於建立了一個新的執行緒。

A)       Thread裡面一個特殊的方法run();這個方法就是為執行一個執行緒而做準備的(當你建立了一個新的執行緒以後,所有實現的業務邏輯全部在run()方法裡面),也就是說在run()方法裡面寫啥業務。執行緒就執行實現啥業務。

B)       啟動一個執行緒用start()方法,也就是說當呼叫Start()方法執行緒準備就緒以後。才能去啟動執行run()方法裡面的所有業務邏輯。、

C)       總結:程序有獨立的執行記憶體和空間。而執行緒是程序的一個執行單元。相同的執行緒是共享記憶體空間的。所以程序執行上對記憶體的開銷比較大。而執行緒比較節省記憶體。

D)       Therad執行緒類提供了好多方法。最常用的有sleep()方法,呼叫此方法是讓一個執行緒處於睡眠狀態。它是Thread類的一個靜態方法。

E)        注意:sleep()在使用過程中會丟擲異常。當在處理異常的時候用try{}catch{}。當重寫的方法無法用throws來處理異常時。就必須用try{}catch{}來處理異常。

F)        如何結束一個執行緒?呼叫方法shutDown()方法。可以定義一個變數。比如:boolean flag=true;將變數變為false不就停止了嗎?

G)       Thread類的join()方法——合併某個執行緒。

H)       Yield()方法,讓出cpu讓其他執行緒執行的機會。

I)          執行緒的優先順序:setPriority();用此方法就是設定執行緒的優先順序。

9、        執行緒同步:多個執行緒同時訪問同一資源時。執行緒與執行緒之間協調的這一過程就叫做執行緒同步。

A)  synchronized ()方法,指同步方法的意思。鎖定執行緒。同步方法實際就是在執行方法的時候當前的物件唄鎖定。(鎖定方法實際就是鎖定了當前方法的物件。必須等當前執行緒執行完才能執行下一個執行緒),執行緒的同步也就是使執行緒處於安全化狀態。

B)    執行緒的死鎖:兩個執行緒相互等待的狀態就形成了死鎖。

C)   如何解決死鎖:加大鎖的粒度