- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) >
- Java中Thread之Sleep()的示例分析
這篇文章主要為大家展示了“Java中Thread之Sleep()的示例分析”,內容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習一下“Java中Thread之Sleep()的示例分析”這篇文章吧。
Thread.sleep()是Thread類(lèi)的一個(gè)靜態(tài)方法,使當前線(xiàn)程休眠,進(jìn)入阻塞狀態(tài)(暫停執行),如果線(xiàn)程在睡眠狀態(tài)被中斷,將會(huì )拋出IterruptedException中斷異常。。主要方法如下:
【a】sleep(long millis) 線(xiàn)程睡眠 millis 毫秒
【b】sleep(long millis, int nanos) 線(xiàn)程睡眠 millis 毫秒 + nanos 納秒
Api文檔:
注意:在哪個(gè)線(xiàn)程里面調用sleep()方法就阻塞哪個(gè)線(xiàn)程。
public class SleepDemo { public static void main(String[] args) throws InterruptedException { Process process = new Process(); Thread thread = new Thread(process); thread.setName("線(xiàn)程Process"); thread.start(); for (int i = 0; i < 10; i++) { System.out.println(Thread.currentThread().getName() + "-->" + i); //阻塞main線(xiàn)程,休眠一秒鐘 Thread.sleep(1000); } } } /** * 線(xiàn)程類(lèi) */ class Process implements Runnable { @Override public void run() { for (int i = 0; i < 10; i++) { System.out.println(Thread.currentThread().getName() + "-->" + i); //休眠一秒鐘 try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }
執行結果:main線(xiàn)程執行一次之后休眠一秒鐘,讓出cpu,此時(shí)Process線(xiàn)程執行一次然后又休眠一秒,依次執行。
下面以一個(gè)倒計時(shí)的功能來(lái)進(jìn)一步說(shuō)明sleep()方法的使用:
/** * @Description: 線(xiàn)程休眠Sleep()方法 * @Author: weishihuai * @Date: 2018/11/11 21:31 * <p> * 1. 注意:sleep()方法使用的位置,如果使用在main線(xiàn)程執行代碼中,則阻塞的是main線(xiàn)程。如果在其他線(xiàn)程執行的代碼中,則阻塞的是執行這些代碼的線(xiàn)程 * 2. 案例: 倒計時(shí)功能 */ public class TestSleepThread { public static void main(String[] args) throws InterruptedException { countDown(10000); } /** * 倒計時(shí)方法 * * @param mills 倒計時(shí)開(kāi)始的時(shí)間距離當前時(shí)間多少毫秒 */ public static void countDown(long mills) { Date endDate = new Date(System.currentTimeMillis() + mills); long endTime = endDate.getTime(); while (true) { System.out.println(new SimpleDateFormat("hh:mm:ss").format(endDate)); //下一秒時(shí)間 endDate = new Date(endDate.getTime() - 1000); //休眠一秒鐘 try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } if (endTime - endDate.getTime() > mills) { break; } } } }
執行結果:
【a】sleep()方法是Thread類(lèi)的靜態(tài)方法,如果調用線(xiàn)程對象.sleep()方法并不是該線(xiàn)程就休眠,反正在哪一個(gè)線(xiàn)程里面執行了sleep()方法哪一個(gè)線(xiàn)程就休眠。
【b】線(xiàn)程睡眠到期自動(dòng)蘇醒,并返回到可運行狀態(tài)(就緒),不是運行狀態(tài)。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。
Copyright ? 2009-2021 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 珠海市特網(wǎng)科技有限公司 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站