免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
3、Thread API的簡(jiǎn)單介紹

1、sleep方法

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

sleep方法的作用是讓當(dāng)前線程暫停執(zhí)行指定時(shí)間,給執(zhí)行機(jī)會(huì)留給其他線程,但是調(diào)用sleep不會(huì)釋放對(duì)象鎖

1.1、用TimeUnit代替Thread.sleep

??可以使用TimeUnit類代替Thread.sleep,TimeUnit是jdk1.5以后增加的一個(gè)枚舉類,對(duì)sleep方法提供了很好的封裝,可以省去時(shí)間單位的換算。

思考1:sleep(n)和sleep(0)有什么不同
??線程有Runnable和Waiting兩種狀態(tài),Runnable狀態(tài)又包含就緒狀態(tài)和運(yùn)行狀態(tài),當(dāng)調(diào)用sleep(n)時(shí),當(dāng)前線程從運(yùn)行狀態(tài)轉(zhuǎn)為等待狀態(tài),線程被放入等待隊(duì)列,等待定時(shí)器n秒后的中斷事件,當(dāng)?shù)竭_(dá)n秒計(jì)時(shí)時(shí),線程從等待隊(duì)列進(jìn)入到就緒隊(duì)列。需要注意的是等待隊(duì)列里的線程是不參與CPU競(jìng)爭(zhēng)的,而就緒隊(duì)列里的線程才會(huì)參與CPU競(jìng)爭(zhēng);
??當(dāng)調(diào)用sleep(0)時(shí),當(dāng)前線程是直接從運(yùn)行狀態(tài)轉(zhuǎn)為就緒狀態(tài)的,即線程直接進(jìn)入到了就緒隊(duì)列,就會(huì)參與CPU競(jìng)爭(zhēng)。當(dāng)然調(diào)用sleep(0)的目的并非真正的讓線程掛起0毫秒,而是在于讓當(dāng)前線程暫時(shí)放棄CPU,給執(zhí)行機(jī)會(huì)留給其它線程,相當(dāng)于一個(gè)讓位動(dòng)作。

思考2:如何喚醒正在睡眠的線程(sleeping)
??調(diào)用Sleep(n)會(huì)使得當(dāng)前線程暫停執(zhí)行指定時(shí)間,線程進(jìn)入等待隊(duì)列,并且不會(huì)釋放對(duì)象鎖,這時(shí)線程狀態(tài)就變?yōu)樽枞麪顟B(tài),如果另外一個(gè)線程調(diào)用被阻塞線程的interrupt方法,那么就可以打斷這種阻塞,并且會(huì)拋出InterruptedException,但是如果線程已經(jīng)是死亡的狀態(tài)了,那么嘗試對(duì)其interrupt就會(huì)被忽略。
類似Object的wait、Thread的sleep、Thread的join等方法都會(huì)使得線程進(jìn)入阻塞狀態(tài),調(diào)用Thread的interrupt都會(huì)打斷這種阻塞。

2、currentThread方法

??currentThread方法返回的是一個(gè)線程實(shí)例,這個(gè)實(shí)例就是指當(dāng)前代碼正在被哪個(gè)線程調(diào)用的線程實(shí)例,可以通過(guò)這個(gè)方法來(lái)獲取線程的相關(guān)的一些信息,比如線程ID,線程名稱等。

public static native Thread currentThread();

3、getId方法

??getId方法返回的是線程的ID,這個(gè)線程ID是在線程初始化時(shí)生成的一個(gè)唯一長(zhǎng)整型數(shù)值

public long getId()

??在創(chuàng)建線程的初始化方法里設(shè)置線程ID,生成線程ID的方法是一個(gè)靜態(tài)同步方法,保證了生成ID的唯一性

private void init(...){    ...省略...    // 設(shè)置線程ID    tid = nextThreadID();}    // 生成線程IDprivate static synchronized long nextThreadID() {    return ++threadSeqNumber;}

4、getName方法

??getName方法返回的是線程名稱,在創(chuàng)建線程初始化的時(shí)候生成

public final String getName()public Thread(Runnable target) {    init(null, target, "Thread-" + nextThreadNum(), 0);}private static synchronized int nextThreadNum() {    return threadInitNumber++;}

5、isAlive方法

??isAlive是用來(lái)判斷一個(gè)線程是否存活,而判斷一個(gè)線程是否存活在于線程已經(jīng)啟動(dòng)但是還沒(méi)有死亡(也就是線程執(zhí)行完畢)

public final native boolean isAlive();

6、interrupt方法

??interrupt方法用來(lái)中斷線程可以中斷Object#wait、Thread#join、Thread#sleep等各自的一系列方法,并且會(huì)拋出一個(gè)InterruptedException異常
當(dāng)調(diào)用上述方法時(shí),會(huì)使得線程進(jìn)入一個(gè)阻塞的狀態(tài),在另一個(gè)線程里調(diào)用某線程的interrupt方法就可以打斷某個(gè)線程的阻塞狀態(tài)。但是打斷并是意味著線程的生命周期已經(jīng)結(jié)束,僅僅是打斷了了這種阻塞的狀態(tài)。被中斷的線程會(huì)拋出InterruptedException異常,這個(gè)異常相當(dāng)于是一個(gè)信號(hào)一樣,通知當(dāng)前線程被打斷了。

7、interrupted方法與isInterrupted方法

??interrupted():用來(lái)判斷當(dāng)前線程是否已經(jīng)中斷,執(zhí)行后具有將狀態(tài)標(biāo)志置為false的功能

public static boolean interrupted() {    return currentThread().isInterrupted(true);}

??isInterrupted():用來(lái)判斷某個(gè)線程是否已經(jīng)中斷,不具有清除狀態(tài)標(biāo)志的功能

public boolean isInterrupted() {    return isInterrupted(false);}private native boolean isInterrupted(boolean ClearInterrupted);

8、join方法

??join方法就是主線程中調(diào)用子線程的join方法,主線程會(huì)等待子線程執(zhí)行完畢后,才會(huì)繼續(xù)執(zhí)行。
??join方法底層是調(diào)用Object類的wait方法,因此也必須加對(duì)象鎖

public final synchronized void join(long millis) throws InterruptedExceptionpublic final synchronized void join(long millis, int nanos) throws InterruptedExceptionpublic final void join() throws InterruptedException {    join(0);}

9、yield方法

??調(diào)用yield方法就是暗示線程調(diào)度執(zhí)行器,當(dāng)前線程愿意讓出當(dāng)前處理器的使用,給執(zhí)行機(jī)會(huì)留給其他線程,但是線程調(diào)度執(zhí)行器也可以忽略這個(gè)暗示,說(shuō)白了就是這個(gè)讓出了處理器的線程,可以再次被線程調(diào)度執(zhí)行器選中占有處理器從而繼續(xù)執(zhí)行。

public static native void yield();
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
趣談并發(fā)(1):全面認(rèn)識(shí) Thread
Java并發(fā)——線程中斷學(xué)習(xí)
中斷線程Interrupt與Interrupted的用處
JAVA線程的interrupt
Java 基本功 之中斷線程的理解
線程中斷
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服