新聞中心
Java中的sleep和wait怎么使用
在Java中,sleep和wait都是用于控制線程執(zhí)行的關(guān)鍵字,它們可以讓當(dāng)前線程暫停一段時(shí)間,讓其他線程有機(jī)會(huì)執(zhí)行,下面我們分別介紹這兩個(gè)方法的使用。

創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括靈武網(wǎng)站建設(shè)、靈武網(wǎng)站制作、靈武網(wǎng)頁制作以及靈武網(wǎng)絡(luò)營(yíng)銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,靈武網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到靈武省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
1、sleep方法
sleep方法是Thread類的一個(gè)靜態(tài)方法,它可以讓當(dāng)前線程暫停指定的時(shí)間(以毫秒為單位),當(dāng)時(shí)間到達(dá)后,線程會(huì)自動(dòng)恢復(fù)執(zhí)行,這個(gè)方法通常用于讓線程暫停一段時(shí)間,以便給其他線程執(zhí)行的機(jī)會(huì)。
語法:
public static void sleep(long millis) throws InterruptedException;
參數(shù):
millis:需要暫停的時(shí)間,以毫秒為單位。
示例代碼:
public class SleepDemo {
public static void main(String[] args) {
System.out.println("程序開始執(zhí)行");
try {
Thread.sleep(3000); // 讓當(dāng)前線程暫停3秒(3000毫秒)
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("程序恢復(fù)執(zhí)行");
}
}
2、wait方法
wait方法是Object類的一個(gè)實(shí)例方法,它可以讓當(dāng)前線程等待,直到其他線程調(diào)用此對(duì)象的notify()或notifyAll()方法,當(dāng)另一個(gè)線程調(diào)用這些方法時(shí),當(dāng)前線程會(huì)被喚醒并繼續(xù)執(zhí)行,wait方法通常用于等待某個(gè)條件成立,例如等待一個(gè)線程完成任務(wù)。
語法:
public synchronized void wait() throws InterruptedException; public synchronized void wait(long timeout) throws InterruptedException; public synchronized void wait(long timeout, int nanos) throws InterruptedException;
參數(shù):
timeout:等待的最長(zhǎng)時(shí)間,以毫秒為單位,如果設(shè)置為-1,則表示無限期等待。
nanos:可選參數(shù),表示等待的最短時(shí)間內(nèi)的納秒數(shù),如果設(shè)置為-1,則表示使用默認(rèn)值。
示例代碼:
public class WaitDemo {
public static void main(String[] args) {
Object lock = new Object();
Thread thread1 = new Thread(() -> {
synchronized (lock) {
System.out.println("線程1開始執(zhí)行");
try {
lock.wait(); // 讓當(dāng)前線程等待,直到其他線程調(diào)用notify()或notifyAll()方法
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
System.out.println("線程1結(jié)束執(zhí)行");
}
}
});
Thread thread2 = new Thread(() -> {
synchronized (lock) {
System.out.println("線程2開始執(zhí)行");
try {
Thread.sleep(1000); // 讓當(dāng)前線程暫停1秒(1000毫秒)
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
System.out.println("線程2通知線程1可以繼續(xù)執(zhí)行");
lock.notify(); // 喚醒等待的線程1
}
}
});
thread1.start(); // 啟動(dòng)線程1
thread2.start(); // 啟動(dòng)線程2,并在1秒后通知線程1可以繼續(xù)執(zhí)行
}
}
相關(guān)問題與解答
1、為什么使用sleep和wait而不是其他方法?它們有什么優(yōu)勢(shì)?
網(wǎng)頁題目:java中的sleep和wait怎么使用
網(wǎng)頁路徑:http://fisionsoft.com.cn/article/dpeoceh.html


咨詢
建站咨詢
