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