欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

java高級(jí)編程sleep和wait

在Java的高級(jí)編程中,有兩個(gè)十分重要的方法——sleep()和wait()。下面將簡(jiǎn)單介紹它們的用法和區(qū)別:

public void sleep(long millis) throws InterruptedException

sleep()方法可以讓當(dāng)前線程休眠指定時(shí)間,時(shí)間以毫秒為單位。例如:

Thread.sleep(1000) //休眠1秒

在執(zhí)行完以上代碼后,當(dāng)前線程將不會(huì)執(zhí)行任何操作,等待1秒鐘后才會(huì)從sleep()返回繼續(xù)執(zhí)行。

與sleep()方法不同的是,wait()方法需要在監(jiān)視器對(duì)象上調(diào)用:

public final void wait() throws InterruptedException
public final void wait(long timeout) throws InterruptedException
public final void wait(long timeout, int nanos) throws InterruptedException

wait()方法的作用是使當(dāng)前線程進(jìn)入等待狀態(tài),直到該監(jiān)視器對(duì)象被喚醒,或者等待時(shí)間到達(dá)指定的時(shí)間為止。

比如:

synchronized (obj) {
obj.wait();
}

執(zhí)行以上代碼后,線程將進(jìn)入obj對(duì)象的等待隊(duì)列中。在其他線程調(diào)用obj.notify()或obj.notifyAll()之前,該線程都將一直處于等待狀態(tài)。

需要注意的是,wait()方法必須在synchronized塊里面被調(diào)用。如果沒有鎖定監(jiān)視器對(duì)象,則會(huì)拋出IllegalMonitorStateException。此外,喚醒線程的操作也必須在synchronized塊內(nèi)進(jìn)行。

綜上所述,sleep()方法是線程本身的方法,可以讓當(dāng)前線程休眠,并不會(huì)釋放鎖,因此其他線程還可以訪問(wèn)該鎖;而wait()方法是Object的方法,可以讓當(dāng)前線程進(jìn)入對(duì)象的等待隊(duì)列中,并釋放鎖,直到被其他線程喚醒或者等待時(shí)間到達(dá)指定的時(shí)間為止。