sleep與yield異同

sleep:是Thread類的一個靜態方法,該方法會讓當前正在 執行的線程暫停執行,從而將執行機會讓給其餘線程執行。sleep(long mills)參數指定當前線程暫停執行的時間,通過這段阻塞時間後,該線程會進入就緒狀態,等候線程調度器的調度。sleep方法聲明拋出了InterruptedException異常,因此調用sleep方法時要麼在方法開始處拋出異常要麼使用try{}..catch{}塊進行捕獲。 併發

yield方法只會給優先級相同或更高優先級的線程執行機會。yield不會將線程轉入阻塞狀態,只是強制當前線程進入就緒狀態。所以徹底有可能某個線程調用yield方法暫停後,當即又得到處理器資源被執行。yield方法沒有聲明拋出任何異常。 spa

sleep比yield方法有更好的可移植性,一般,不要依靠yield控制併發線程的執行。 線程

code: code

sleep 資源

public class SleepDemo extends Thread 
{
public SleepDemo(String name)
{
super(name);
}


public void run()
{
for(int i=0;i<50;i++)
{
  System.out.println(getName()+"----"+i);
  if(i==20)
  {
try
{
Thread.sleep(1000*10);
}
catch (Exception e)
{
e.printStackTrace();
}
  }
}

}
public static void main(String[] args) 
{
SleepDemo t = new SleepDemo("新線程");
t.start();


for(int i=0;i<30;i++)
{


System.out.println(Thread.currentThread().getName()+"---"+i);
if(i == 15)
   try
   {
Thread.sleep(1000*10);
   }
   catch (Exception e)
   {
e.printStackTrace();
   }
 
}
}
}
get



yield it

public class YieldThread extends Thread 
{
public YieldThread(String name)
{
super(name);
}


public YieldThread()
{


}


public void run()
{
for(int i=0;i<50;i++){
System.out.println(getName()+"--->"+i);
if(i == 20)
{
Thread.yield();
}
}
}


public static void main(String[] args) 
{
YieldThread t1 = new YieldThread("高級");
t1.start();
// 若當前線程優先級最高,那麼即便調用了yield()方法,線程調度器又會將這個線程調度出來從新執行
//t1.setPriority(Thread.MAX_PRIPORITY);
YieldThread t2 = new YieldThread("低級");
t2.start();
t2.setPriority(Thread.MIN_PRIORITY);
//System.out.println("Hello World!");
}
}

io

相關文章
相關標籤/搜索