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