更新時(shí)間:2020-04-29 13:59:59 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2872次
java多線(xiàn)程實(shí)現(xiàn)方式主要有三種:繼承Thread類(lèi)、實(shí)現(xiàn)Runable接口、使用ExecutorService、CallBack、Future實(shí)現(xiàn)有返回結(jié)果的多線(xiàn)程。其中前兩種現(xiàn)成執(zhí)行完是沒(méi)有返回值的,第三種才有返回值。下面詳細(xì)看看三種實(shí)現(xiàn)方式:
1.繼承Thread類(lèi)實(shí)現(xiàn)多線(xiàn)程:
其實(shí),繼承Thread類(lèi)的方法實(shí)現(xiàn)多線(xiàn)程,但其本質(zhì)也是實(shí)現(xiàn)了Runable接口的一個(gè)實(shí)例。啟動(dòng)Thread線(xiàn)程的唯一方法就是通過(guò)Thread類(lèi)的Start()方法。start()方法是一個(gè)Native方法,將啟動(dòng)一個(gè)新線(xiàn)程,并執(zhí)行Run()方法.
這種方法很簡(jiǎn)單,通過(guò)自己的累繼承Thread類(lèi),然后重寫(xiě)Run()方法,就可以啟動(dòng)新線(xiàn)程并執(zhí)行自己定義的Run()方法。如下:

2.實(shí)現(xiàn)Runable接口方式實(shí)現(xiàn)多線(xiàn)程
如果自己的類(lèi)已經(jīng)extends(繼承)另一個(gè)類(lèi),就無(wú)法直接extends類(lèi)Thread,此時(shí),就要靠實(shí)現(xiàn)一個(gè)Runnable接口來(lái)實(shí)現(xiàn)多線(xiàn)程了,如下:

為了啟動(dòng)MyThread,需要首先實(shí)例化一個(gè)Thread,并傳入自己的MyThread實(shí)例:

然而事實(shí)上,當(dāng)傳入了一個(gè)Runabletarget參數(shù)給Thread后,Thread的run()方法就會(huì)調(diào)用target.run().
3.使用ExecutorService、Callable、Future實(shí)現(xiàn)有返回結(jié)果的多線(xiàn)程
ExecutorService、Callable、Future這個(gè)對(duì)象實(shí)際上都是屬于Executor框架中的功能類(lèi)。
基本思想為:可返回值的任務(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)程了。
由于該代碼實(shí)例代碼內(nèi)容較長(zhǎng),理解起來(lái)比較復(fù)雜,如果你需要源碼進(jìn)行學(xué)習(xí),請(qǐng)聯(lián)系小編,基于jdk1.5或者1.5以上的版本。
以上就是動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“Java基礎(chǔ)學(xué)習(xí):Java多線(xiàn)程爬蟲(chóng)”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問(wèn),請(qǐng)?jiān)诰€(xiàn)咨詢(xún),有專(zhuān)業(yè)老師隨時(shí)為你服務(wù)。
相關(guān)閱讀
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話(huà)與您溝通安排學(xué)習(xí)