說明:如果您有任何疑問或想咨詢其他業(yè)務(wù)請撥打電話 400 685 0732
全網(wǎng)監(jiān)測海量數(shù)據(jù)按需發(fā)布監(jiān)測預(yù)警
實(shí)時把握輿情動態(tài)精準(zhǔn)追溯信息源頭
在學(xué)習(xí)java設(shè)計(jì)語言程序的過程當(dāng)中,我們經(jīng)常會接觸到j(luò)ava線程,那么你知道java線程是什么?java多線程如何實(shí)現(xiàn)?如果不知道的朋友,那么就與小編一起來好好的學(xué)習(xí)一下吧。
java線程——java線程是什么
線程是進(jìn)程中的一個實(shí)體,是被系統(tǒng)獨(dú)立調(diào)度和分派的基本單位,線程自己不擁有系統(tǒng)資源,只擁有一點(diǎn)在運(yùn)行中必不可少的資源,但它可與同屬一個進(jìn)程的其它線程共享進(jìn)程所擁有的全部資源。一個線程可以創(chuàng)建和撤消另一個線程,同一進(jìn)程中的多個線程之間可以并發(fā)執(zhí)行。由于線程之間的相互制約,致使線程在運(yùn)行中呈現(xiàn)出間斷性。線程也有就緒、阻塞和運(yùn)行三種基本狀態(tài)。
線程是程序中一個單一的順序控制流程.在單個程序中同時運(yùn)行多個線程完成不同的工作,稱為多線程.
線程和進(jìn)程的區(qū)別在于,子進(jìn)程和進(jìn)程有不同的代碼和數(shù)據(jù)空間,而多個線程則共享數(shù)據(jù)空間,每個線程有自己的執(zhí)行堆棧和程序計(jì)數(shù)器為其執(zhí)行上下文.多線程主要是為了節(jié)約CPU時間,發(fā)揮利用,根據(jù)具體情況而定.線程的運(yùn)行中需要使用計(jì)算機(jī)的內(nèi)存資源和CPU.
JA多線程實(shí)現(xiàn)的三種方式
1、繼承Thread類實(shí)現(xiàn)多線程
繼承Thread類的方法盡管被我列為一種多線程實(shí)現(xiàn)方式,但Thread本質(zhì)上也是實(shí)現(xiàn)了Runnable接口的一個實(shí)例,它代表一個線程的實(shí)例,并且,啟動線程的唯一方法就是通過Thread類的start()實(shí)例方法。start()方法是一個native方法,它將啟動一個新線程,并執(zhí)行run()方法。這種方式實(shí)現(xiàn)多線程很簡單,通過自己的類直接extendThread,并復(fù)寫run()方法,就可以啟動新線程并執(zhí)行自己定義的run()方法。
2、實(shí)現(xiàn)Runnable接口方式實(shí)現(xiàn)多線程
如果自己的類已經(jīng)extends另一個類,就無法直接extendsThread,此時,必須實(shí)現(xiàn)一個Runnable接口。
3、使用ExecutorService、Callable、Future實(shí)現(xiàn)有返回結(jié)果的多線程
ExecutorService、Callable、Future這個對象實(shí)際上都是屬于Executor框架中的功能類。想要詳細(xì)了解Executor框架的可以訪問java官網(wǎng),這里面對該框架做了很詳細(xì)的解釋。返回結(jié)果的線程是在JDK1.5中引入的新特征,確實(shí)很實(shí)用,有了這種特征我就不需要再為了得到返回值而大費(fèi)周折了,而且即便實(shí)現(xiàn)了也可能漏洞百出。
可返回值的任務(wù)必須實(shí)現(xiàn)Callable接口,類似的,無返回值的任務(wù)必須Runnable接口。執(zhí)行Callable任務(wù)后,可以獲取一個Future的對象,在該對象上調(diào)用get就可以獲取到Callable任務(wù)返回的Object了,再結(jié)合線程池接口ExecutorService就可以實(shí)現(xiàn)傳說中有返回結(jié)果的多線程了。下面提供了一個完整的有返回結(jié)果的多線程測試?yán)樱贘DK1.5下驗(yàn)證過沒問題可以直接使用。
以上就是有關(guān)java線程的內(nèi)容介紹,在使用java線程的過程當(dāng)中,不管你選擇的是哪一種實(shí)現(xiàn)方式他們都會有它各自的使用注意事項(xiàng),所以如果你想了解具體的內(nèi)容的話歡迎關(guān)注我們文軍營銷的官網(wǎng)。
推薦閱讀
說明:如果您有任何疑問或想咨詢其他業(yè)務(wù)請撥打電話 400 685 0732