Thread基礎(chǔ)

記錄Java Thread的基礎(chǔ)點欣簇。

線程的實現(xiàn)

線程的定義有兩種方式

  • 繼承Thread類
  • 實現(xiàn)Runnable接口

線程的啟動

無論是繼承Thread類還是實現(xiàn)Runnable接口探膊,線程的啟動方式都是:

Thread thread = new Thread();
thread.start();
// 或者
Thread runnable = new Thread(new Runnable());
runnable.start();

run()

線程實際運行調(diào)用的是run()方法倦畅。

  • 其中Thread類中的run() 實際是調(diào)用傳入Runnable對象的run()方法
@Override
public void run() {
    if (target != null) {
        target.run();
    }
}

線程狀態(tài)

NEW, // 新建邑狸,創(chuàng)建后尚未啟動的線程處于這種狀態(tài)

RUNNABLE, // 運行
          // 處于這種狀態(tài)的線程有可能正在執(zhí)行也有可能正在等待CPU分配執(zhí)行時間

BLOCKED, // 阻塞

WAITING, // 無限期等待
         // 處于這種狀態(tài)CPU不會分配執(zhí)行時間
         // 需要其他線程喚醒

TIMED_WAITING, // 限期等待
               // 處于這種狀態(tài)CPU不會分配執(zhí)行時間
               // 不需要其他線程喚醒违孝,在一定時間之后會由系統(tǒng)自動喚醒

TERMINATED; // 結(jié)束泉坐,線程已經(jīng)結(jié)束執(zhí)行

線程狀態(tài)轉(zhuǎn)換關(guān)系圖:


java-thread-status.jpg

線程的屬性和方法

設(shè)置優(yōu)先級

public final void setPriority(int newPriority)

每個類都有自己的優(yōu)先級两入,一般property用1-10的整數(shù)表示轨奄,默認(rèn)優(yōu)先級是5孟害,優(yōu)先級最高是10;優(yōu)先級高的線程并不一定比優(yōu)先級低的線程執(zhí)行的機會高挪拟,只是執(zhí)行的機率高挨务;默認(rèn)一個線程的優(yōu)先級和創(chuàng)建他的線程優(yōu)先級相同。

sleep

public static native void sleep(long millis) throws InterruptedException;
public static void sleep(long millis, int nanos) throws InterruptedException

可以使用TimeUnit的sleep方法

TimeUnit.MILLISECONDS.sleep(500L);
// 內(nèi)部實現(xiàn)還是調(diào)用Thread.sleep()實現(xiàn)的,源碼如下
public void sleep(long timeout) throws InterruptedException {
    if (timeout > 0) {
        long ms = toMillis(timeout);
        int ns = excessNanos(timeout, ms);
        Thread.sleep(ms, ns);
    }
}

當(dāng)前線程睡眠/millis的時間(millis指定睡眠時間是其最小的不執(zhí)行時間舞丛,因為sleep(millis)休眠到達后耘子,無法保證會被JVM立即調(diào)度);sleep()是一個靜態(tài)方法(static method) 球切,所以他不會停止其他的線程也處于休眠狀態(tài)谷誓;線程sleep()時不會失去擁有的對象鎖。作用:保持對象鎖吨凑,讓出CPU捍歪,調(diào)用目的是不讓當(dāng)前線程獨自霸占該進程所獲取的CPU資源户辱,以留一定的時間給其他線程執(zhí)行的機會;

yield

public static native void yield();

讓出CPU的使用權(quán)糙臼,給其他線程執(zhí)行機會庐镐、讓同等優(yōu)先權(quán)的線程運行(但并不保證當(dāng)前線程會被JVM再次調(diào)度、使該線程重新進入Running狀態(tài))变逃,如果沒有同等優(yōu)先權(quán)的線程必逆,那么yield()方法將不會起作用。

它僅能是一個線程從運行狀態(tài)轉(zhuǎn)換到可運行狀態(tài)揽乱,而不是等待或阻塞狀態(tài)名眉。

join

public final void join() throws InterruptedException

public final synchronized void join(long mills)
    throws InterruptedException

public final synchronized void join(long millis, int nanos) throws InterruptedException

使用該方法的線程會在此之間執(zhí)行完畢后再往下繼續(xù)執(zhí)行。

特殊的線程方法

object.wait()

// 存在對象
Object obj ;
// 使用
synchronized(obj){
    obj.wait(); // 無限等待
    obj.wait(1000L); // 設(shè)定等待超時時間(有限等待)
}

當(dāng)一個線程執(zhí)行到wait()方法時凰棉,他就進入到一個和該對象相關(guān)的等待池(Waiting Pool)中损拢,同時失去了對象的機鎖—暫時的,wait后還要返還對象鎖撒犀。當(dāng)前線程必須擁有當(dāng)前對象的鎖福压,如果當(dāng)前線程不是此鎖的擁有者,會拋出IllegalMonitorStateException異常,所以wait()必須在synchronized 代碼塊中調(diào)用或舞。

object.notify()/notifyAll()

喚醒在當(dāng)前對象等待池中等待的第一個線程/所有線程荆姆。notify()/notifyAll()也必須擁有相同對象鎖,否則也會拋出IllegalMonitorStateException異常映凳。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末胞枕,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子魏宽,更是在濱河造成了極大的恐慌腐泻,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件队询,死亡現(xiàn)場離奇詭異派桩,居然都是意外死亡,警方通過查閱死者的電腦和手機蚌斩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進店門铆惑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人送膳,你說我怎么就攤上這事员魏。” “怎么了叠聋?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵撕阎,是天一觀的道長。 經(jīng)常有香客問我碌补,道長虏束,這世上最難降的妖魔是什么棉饶? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮镇匀,結(jié)果婚禮上照藻,老公的妹妹穿的比我還像新娘。我一直安慰自己汗侵,他們只是感情好幸缕,可當(dāng)我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著晰韵,像睡著了一般冀值。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上宫屠,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天,我揣著相機與錄音滑蚯,去河邊找鬼浪蹂。 笑死,一個胖子當(dāng)著我的面吹牛告材,可吹牛的內(nèi)容都是我干的坤次。 我是一名探鬼主播,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼斥赋,長吁一口氣:“原來是場噩夢啊……” “哼缰猴!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起疤剑,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤滑绒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后隘膘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體疑故,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年弯菊,在試婚紗的時候發(fā)現(xiàn)自己被綠了纵势。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡管钳,死狀恐怖钦铁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情才漆,我是刑警寧澤牛曹,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站醇滥,受9級特大地震影響躏仇,放射性物質(zhì)發(fā)生泄漏恋脚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一焰手、第九天 我趴在偏房一處隱蔽的房頂上張望糟描。 院中可真熱鬧,春花似錦书妻、人聲如沸船响。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽见间。三九已至,卻和暖如春工猜,著一層夾襖步出監(jiān)牢的瞬間米诉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工篷帅, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留史侣,地道東北人。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓魏身,卻偏偏與公主長得像惊橱,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子箭昵,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,675評論 2 359