多線程之實(shí)現(xiàn)方式

一、簡(jiǎn)介

首先讓我們來(lái)了解下在操作系統(tǒng)中進(jìn)程和線程的區(qū)別:

  進(jìn)程:每個(gè)進(jìn)程都有獨(dú)立的代碼和數(shù)據(jù)空間(進(jìn)程上下文),進(jìn)程間的切換會(huì)有較大的開(kāi)銷(xiāo),一個(gè)進(jìn)程包含1--n個(gè)線程。(進(jìn)程是資源分配的最小單位)

  線程:同一類(lèi)線程共享代碼和數(shù)據(jù)空間,每個(gè)線程有獨(dú)立的運(yùn)行棧和程序計(jì)數(shù)器(PC),線程切換開(kāi)銷(xiāo)小。(線程是cpu調(diào)度的最小單位)

線程和進(jìn)程一樣分為五個(gè)階段:創(chuàng)建、就緒、運(yùn)行、阻塞、終止。

  多進(jìn)程是指操作系統(tǒng)能同時(shí)運(yùn)行多個(gè)任務(wù)(程序)。

  多線程是指在同一程序中有多個(gè)順序流在執(zhí)行。

二、實(shí)現(xiàn)方式

(1)繼承Thread類(lèi),重寫(xiě)run函數(shù)?

創(chuàng)建:?

class xx extends Thread{?

public void run(){?

Thread.sleep(1000)//線程休眠1000毫秒,sleep使線程進(jìn)入Block狀態(tài),并釋放資源?

}}?

開(kāi)啟線程:?

對(duì)象.start()//啟動(dòng)線程,run函數(shù)運(yùn)行 。

注意:start()方法的調(diào)用后并不是立即執(zhí)行多線程代碼,而是使得該線程變?yōu)榭蛇\(yùn)行態(tài)(Runnable),什么時(shí)候運(yùn)行是由操作系統(tǒng)決定的。

從程序運(yùn)行的結(jié)果可以發(fā)現(xiàn),多線程程序是亂序執(zhí)行。因此,只有亂序執(zhí)行的代碼才有必要設(shè)計(jì)為多線程。

Thread.sleep()方法調(diào)用目的是不讓當(dāng)前線程獨(dú)自霸占該進(jìn)程所獲取的CPU資源,以留出一定時(shí)間給其他線程執(zhí)行的機(jī)會(huì)。

實(shí)際上所有的多線程代碼執(zhí)行順序都是不確定的,每次執(zhí)行的結(jié)果都是隨機(jī)的。

(2)實(shí)現(xiàn)Runnable接口,重寫(xiě)run函數(shù)?

開(kāi)啟線程:?

Thread t = new Thread(對(duì)象)//創(chuàng)建線程對(duì)象?

t.start()?

(3)實(shí)現(xiàn)Callable接口,重寫(xiě)call函數(shù)?

Callable是類(lèi)似于Runnable的接口,實(shí)現(xiàn)Callable接口的類(lèi)和實(shí)現(xiàn)Runnable的類(lèi)都是可被其它線程執(zhí)行的任務(wù),該方法有返回結(jié)果。?

Callable和Runnable有幾點(diǎn)不同:?

a、Callable規(guī)定的方法是call(),而Runnable規(guī)定的方法是run().?

b、Callable的任務(wù)執(zhí)行后可返回值,而Runnable的任務(wù)是不能返回值的?

c、call()方法可拋出異常,而run()方法是不能拋出異常的。?

d、運(yùn)行Callable任務(wù)可拿到一個(gè)Future對(duì)象,F(xiàn)uture表示異步計(jì)算的結(jié)果。它提供了檢查計(jì)算是否完成的方法,等待計(jì)算的完成,并檢索計(jì)算的結(jié)果.通過(guò)Future對(duì)象可了解任務(wù)執(zhí)行情況,可取消任務(wù)的執(zhí)行,還可獲取任務(wù)執(zhí)行的結(jié)果。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、線程和進(jìn)程的區(qū)別 進(jìn)程是執(zhí)行者的應(yīng)用程序,是操作系統(tǒng)資源分配和獨(dú)立運(yùn)行的基本單位。而線程是進(jìn)程內(nèi)部的一個(gè)執(zhí)行序...
    24_yu閱讀 652評(píng)論 0 0
  • 線程概述 線程與進(jìn)程 進(jìn)程 ?每個(gè)運(yùn)行中的任務(wù)(通常是程序)就是一個(gè)進(jìn)程。當(dāng)一個(gè)程序進(jìn)入內(nèi)存運(yùn)行時(shí),即變成了一個(gè)進(jìn)...
    閩越布衣閱讀 1,099評(píng)論 1 7
  • 該文章轉(zhuǎn)自:http://blog.csdn.net/evankaka/article/details/44153...
    加來(lái)依藍(lán)閱讀 7,470評(píng)論 3 87
  • 01 我們要經(jīng)歷多少次戀愛(ài)才能夠長(zhǎng)大成人,小時(shí)候看了很多童話故事,或許可能就是這些童話暖心了每一個(gè)寒冷的冬夜。但是...
    KoalaZ閱讀 240評(píng)論 0 0
  • 牛叔工作4年了,也離開(kāi)學(xué)校4年了,白天上班,無(wú)論多累,回到家還是想拿起畫(huà)筆畫(huà)些東西出來(lái)。我沒(méi)有別的愛(ài)好,不逛街,不...
    放牛的小畫(huà)家閱讀 2,725評(píng)論 0 8

友情鏈接更多精彩內(nèi)容