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