Java多線程的實現(xiàn)方式

先記住一句話:線程操作資源類

一应役、Java使用多線程主要有三種方式:

第一種:繼承Thread類

步驟:

① 定義一個類,繼承Thread類燥筷,并重寫Thead類的run方法箩祥,run方法內(nèi)的內(nèi)容為該線程要執(zhí)行的任務(wù)。run方法也被稱為執(zhí)行體肆氓。
② 創(chuàng)建Thead子類的實例袍祖,即創(chuàng)建線程對象。
③ 使用線程的start方法啟動線程谢揪。

第二種:實現(xiàn)Runnable方法蕉陋,Java8以后可以結(jié)合lambda表達式使用(Runnable接口的實現(xiàn)類并不是線程類捐凭,只是線程運行的目標類,即線程要干的事兒凳鬓,執(zhí)行線程還需要依賴Thread類)

步驟:

① 定義一個類茁肠,實現(xiàn)Runnable接口,并重寫該接口的run方法缩举,run方法體仍然是執(zhí)行體垦梆。
② 創(chuàng)建一個Thead類的實例,并將實現(xiàn)Runnable接口的類的實例作為參數(shù)傳入Thead類的構(gòu)造器中蚁孔。
③ 調(diào)用Thread類實例的start方法啟動線程奶赔。

第三種:實現(xiàn)Callable接口(需使用Future接口的實現(xiàn)類配合)

步驟:

① 定義一個類A,實現(xiàn)Callable接口杠氢,并重寫該接口的call方法站刑,call方法體仍然是執(zhí)行體,call方法有返回值鼻百。
② 創(chuàng)建實現(xiàn)Callable接口的類A的實例B绞旅,并使用Future接口的實現(xiàn)類FutureTask子類包裝B,F(xiàn)utureTask對象封裝了B的call方法的返回值温艇。
③ 創(chuàng)建一個Thead類的實例因悲,并將FutureTask的類的實例作為參數(shù)傳入Thead類的構(gòu)造器中。
④ 調(diào)用Thread類實例的start方法啟動線程勺爱。
⑤ 需要時晃琳,調(diào)用FutureTask類的實例的get方法獲取call方法的返回值。

二琐鲁、創(chuàng)建線程的三種方式的對比

采用實現(xiàn)Runnable卫旱、Callable接口的方式創(chuàng)建多線程時,優(yōu)勢是:

線程類只是實現(xiàn)了Runnable接口或Callable接口围段,還可以繼承其他類(java類可實現(xiàn)多個接口顾翼,但只能繼承一個父類)。

在這種方式下奈泪,多個線程可以共享同一個target對象适贸,所以非常適合多個相同線程來處理同一份資源的情況,從而可以將CPU涝桅、代碼和數(shù)據(jù)分開拜姿,形成清晰的模型,較好地體現(xiàn)了面向?qū)ο蟮乃枷搿?/p>

劣勢是:

編程稍微復(fù)雜冯遂,如果要訪問當(dāng)前線程蕊肥,則必須使用Thread.currentThread()方法。

使用繼承Thread類的方式創(chuàng)建多線程時優(yōu)勢是:

編寫簡單债蜜,如果需要訪問當(dāng)前線程晴埂,則無需使用Thread.currentThread()方法究反,直接使用this即可獲得當(dāng)前線程。

劣勢是:

線程類已經(jīng)繼承了Thread類儒洛,所以不能再繼承其他父類精耐。

三、使用線程池執(zhí)行操作

jdk1.5之后新增的java.util.concurrent包中提供了很多種線程池的實現(xiàn):

image

可以使用 Executors 進行創(chuàng)建琅锻,只需創(chuàng)建線程對象卦停,放入調(diào)用ExecutorService的execute方法并將創(chuàng)建的線程對象傳入即可(推薦使用線程池的submit方法,因為submit方法可以提交實現(xiàn)Callable接口的類),無需用戶再手動啟動線程恼蓬,同時可以提高線程的利用率惊完。上述都是舊的使用方式了,因為線程池中無界隊列可能導(dǎo)致內(nèi)存溢出的問題处硬,不想被領(lǐng)導(dǎo)爆錘小槐,就按照阿里規(guī)范來,其中明確要求線程池的使用要自己創(chuàng)建并指定隊列長度荷辕。

另外提一下線程池的體系結(jié)構(gòu):

java.util.concurrent.Executor : 負責(zé)線程的執(zhí)行和調(diào)度的根接口
      ||-- **ExecutorService 子接口 : 線程池的主要接口
          ||-- ThreadPoolExecutor : 線程池的實現(xiàn)類
              ||-- ScheduleExecutorService 子接口:負責(zé)線程的調(diào)度
                 ||-- ScheduledThreadPoolExecutor : 繼承ThreadPoolExecutor 實現(xiàn) ScheduleExecutorService 
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末凿跳,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子疮方,更是在濱河造成了極大的恐慌控嗜,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件骡显,死亡現(xiàn)場離奇詭異疆栏,居然都是意外死亡,警方通過查閱死者的電腦和手機惫谤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進店門壁顶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人石挂,你說我怎么就攤上這事博助∠瘴郏” “怎么了痹愚?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蛔糯。 經(jīng)常有香客問我拯腮,道長,這世上最難降的妖魔是什么蚁飒? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任动壤,我火速辦了婚禮,結(jié)果婚禮上淮逻,老公的妹妹穿的比我還像新娘琼懊。我一直安慰自己阁簸,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布哼丈。 她就那樣靜靜地躺著启妹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪醉旦。 梳的紋絲不亂的頭發(fā)上饶米,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天,我揣著相機與錄音车胡,去河邊找鬼檬输。 笑死,一個胖子當(dāng)著我的面吹牛匈棘,可吹牛的內(nèi)容都是我干的丧慈。 我是一名探鬼主播,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼主卫,長吁一口氣:“原來是場噩夢啊……” “哼伊滋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起队秩,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤笑旺,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后馍资,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體筒主,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年鸟蟹,在試婚紗的時候發(fā)現(xiàn)自己被綠了乌妙。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡建钥,死狀恐怖藤韵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情熊经,我是刑警寧澤泽艘,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站镐依,受9級特大地震影響匹涮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜槐壳,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一然低、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦雳攘、人聲如沸带兜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鞋真。三九已至,卻和暖如春沃于,著一層夾襖步出監(jiān)牢的瞬間涩咖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工繁莹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留檩互,地道東北人。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓咨演,卻偏偏與公主長得像闸昨,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子薄风,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,066評論 2 355

推薦閱讀更多精彩內(nèi)容