您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關java中的線程指的是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
線程(英文:thread),臺灣地區譯為執行緒(英文:thread of execution)、緒程,操作系統技術中的術語,是操作系統能夠進行運算調度的最小單位,它被包涵在進程之中,是行程中的實際運作單位。一條線程指的是進程中一個單一順序的控制流,一個進程中可以并行多個線程,每條線程并行執行不同的任務。
Java中每個線程都有一個調用棧,即使不在程序中創建任何新的線程,線程也在后臺運行。main()方法運行在一個線程內,稱為主線程。一旦創建一個新的線程,就產生一個新的調用棧。
線程分為兩類:用戶線程和守候線程。當所有用戶線程執行完畢后,JVM自動關閉。但是守候線程卻不獨立與JVM,守候線程一般是有操作系統或用戶自己創建的。
線程給我們帶來的好處
如果能合理地使用線程,將會減少開發和維護成本,甚至可以改善復雜應用程序的性能。如在GUI應用程序中,還以通過線程的異步特性來更好地處理事件;在應用服務器程序中可以通過建立多個線程來處理客戶端的請求。
線程甚至還可以簡化虛擬機的實現,如Java虛擬機(JVM)的垃圾回收器(garbage collector)通常運行在一個或多個線程中。因此,使用線程將會從以下五個方面來改善我們的應用程序:
1. 簡化編程模型
如果程序只完成一項任務,那只要寫一個單線程的程序,并且按著執行這個任務的步驟編寫代碼即可。但要完成多項任務,如果還使用單線程的話,那就得在在程序中判斷每項任務是否應該執行以及什么時候執行。如顯示一個時鐘的時、分、秒三個指針。
使用單線程就得在循環中逐一判斷這三個指針的轉動時間和角度。如果使用三個線程分另來處理這三個指針的顯示,那么對于每個線程來說就是指行一個單獨的任務。這樣有助于開發人員對程序的理解和維護。
2. 簡化異步事件的處理
當一個服務器應用程序在接收不同的客戶端連接時最簡單地處理方法就是為每一個客戶端連接建立一個線程。然后監聽線程仍然負責監聽來自客戶端的請求。
如果這種應用程序采用單線程來處理,當監聽線程接收到一個客戶端請求后,開始讀取客戶端發來的數據,在讀完數據后,read方法處于阻塞狀態,也就是說,這個線程將無法再監聽客戶端請求了。
而要想在單線程中處理多個客戶端請求,就必須使用非阻塞的Socket連接和異步I/O。但使用異步I/O方式比使用同步I/O更難以控制,也更容易出錯。因此,使用多線程和同步I/O可以更容易地處理類似于多請求的異步事件。
3. 充分利用CPU資源
現在世界上大多數計算機只有一塊CPU。因此,充分利用CPU資源顯得尤為重要。當執行單線程程序時,由于在程序發生阻塞時CPU可能會處于空閑狀態。這將造成大量的計算資源的浪費。
而在程序中使用多線程可以在某一個線程處于休眠或阻塞時,而CPU又恰好處于空閑狀態時來運行其他的線程。這樣CPU就很難有空閑的時候。因此,CPU資源就得到了充分地利用。
4. 使GUI更有效率
使用單線程來處理GUI事件時,必須使用循環來對隨時可能發生的GUI事件進行掃描,在循環內部除了掃描GUI事件外,還得來執行其他的程序代碼。如果這些代碼太長,那么GUI事件就會被“凍結”,直到這些代碼被執行完為止。
在現代的GUI框架(如SWING、AWT和SWT)中都使用了一個單獨的事件分派線程(event dispatch thread,EDT)來對GUI事件進行掃描。當我們按下一個按鈕時,按鈕的單擊事件函數會在這個事件分派線程中被調用。
由于EDT的任務只是對GUI事件進行掃描,因此,這種方式對事件的反映是非常快的。
5. 節約成本
提高程序的執行效率一般有三種方法:
(1)增加計算機的CPU個數。
(2)為一個程序啟動多個進程
(3)在程序中使用多線程。
看完上述內容,你們對java中的線程有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。