iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 27
0
自我挑戰組

我的語言自學接力系列 第 27

D27:[Java]凍結執行緒 sleep

  • 分享至 

  • xImage
  •  

在[Java]多執行緒(基本觀念)中的範例,故意加了一個拖慢執行緒的迴圈;
那透過讓執行緒小睡片刻,如此便可稍緩執行緒的執行。

for(int i=0;i<3;i++)
{
    for(int j=0;j<100000000;j++);
    System.out.println(name);
}

我們可以在迴圈內加個 sleep(),在[Java]執行緒生命週期(介紹)附註中提到:

sleep() 函數,可用來設定睡眠時間,即 sleep(long millis)。
毫秒(千分之一秒)。

例如 sleep(1000) 就代表睡1秒鐘(1秒後就會醒來)。

因此將迴圈改成:

for(int i=0;i<3;i++)
      {
         try
         {
            sleep((int)(1000*Math.random()));
         }
         catch(InterruptedException e){}
         System.out.println(name);
      }

sleep() 可能會拋出 InterruptedException 例外,所以我們將 sleep() 撰寫在 try-catch 區塊內。

而 sleep() 的引數 (int)(1000*Math.random()) 部分:
我們透過 Math.random() 來產生 0~1的浮點數亂數,乘上1000 即 0~1000 之間的浮點數亂數;
最後在前面強制轉型成整數,所以加上(int)。

完整的程式碼:

class multi_Test
{
   private String name;
   public multi_Test(String str)
   {
      name=str;
   }
   public void show()
   {
      for(int i=0;i<3;i++)
      {
         try
         {
            sleep((int)(1000*Math.random()));
         }
         catch(InterruptedException e){}
         System.out.println(name);
      }
   }
}

public class multi_thread_3
{
   public static void main(String args[])
   {
      multi_Test apple=new multi_Test("apple");
      multi_Test pen=new multi_Test("pen");
      apple.start();
      pen.start();
   }
}

如果您喜歡我的文章,可以至 4xDevJava 學習系列閱讀更多 Java 文章。


上一篇
D26:[Java]執行緒生命週期(介紹)
下一篇
D28:[Java]凍結執行緒 join
系列文
我的語言自學接力31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言