為什麼要使用多執行緒?多執行緒的優點和缺點是什麼?
首先說下多執行緒出現的原因:
為了解決負載均衡問題,充分利用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();每建立一個新的
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) 如何解決死鎖:加大鎖的粒度