sleep与yield异同

sleep:是Thread类的一个静态方法,该方法会让当前正在 执行的线程暂停执行,从而将执行机会让给其他线程执行。sleep(long mills)参数指定当前线程暂停执行的时间,经过这段阻塞时间后,该线程会进入就绪状态,等候线程调度器的调度。sleep方法声明抛出了InterruptedException异常,所以调用sleep方法时要么在方法开始处抛出异常要么使用try{}..catch{}块进行捕获。

yield方法只会给优先级相同或更高优先级的线程执行机会。yield不会将线程转入阻塞状态,只是强制当前线程进入就绪状态。因此完全有可能某个线程调用yield方法暂停后,立即又获得处理器资源被执行。yield方法没有声明抛出任何异常。

sleep比yield方法有更好的可移植性,通常,不要依靠yield控制并发线程的执行。

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();
   }
 
}
}
}



yield

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!");
}
}

转载于:https://my.oschina.net/u/938966/blog/109455

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值