Java线程中yield()方法的使用

yield()方法的作用是:暂停当前正在执行的线程对象,并执行其他线程。注意:这里的其他也包含当前线程。

1.首先继承Thread实现一个子类YieldTest,在它的run方法中执行yield()方法。
class YieldTest extends Thread {

  public void run() {
    Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
    System.out.println("YieldTest-run-begin");
    System.out.println("YieldTest-1"); 
    YieldAndSleep.calculate();
    yield();
    System.out.println("YieldTest-2");
    YieldAndSleep.calculate(); 
    System.out.println("YieldTest-run-end");
  }
}
2.然后继承Thread实现一个子类SleepTest,在它的run方法中执行sleep方法,用来对比yield方法。
class SleepTest extends Thread {
  
  public void run() {
  Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
    System.out.println("SleepTest-run-begin");
    System.out.println("SleepTest-1"); 
    YieldAndSleep.calculate();
    try{  
        sleep(1000);
    } catch (Exception e) {}  
    System.out.println("SleepTest-2"); 
    YieldAndSleep.calculate();  
    System.out.println("SleepTest-run-end");
  }   
}  

3.最后分别启动两个YieldTest线程和两个SleepTest线程,观察它们的运行状况
public class YieldAndSleep {

  public static void calculate() {
      for (int i = 0;i<100000000;i++) {
       int j = i*i;
      }
  }
  public static void main(String[] args) {   
    for (int i = 1; i <= 2; i++) { 
      System.out.println("YieldTest().start()-begin");  
      new YieldTest().start(); 
      System.out.println("YieldTest().start()-end");  
    }   
    
    for (int i = 1; i <= 2; i++) { 
      System.out.println("SleepTest().start()-begin");  
      new SleepTest().start(); 
      System.out.println("SleepTest().start()-end");  
    }  
  }  
}
4.看一下运行的结果
YieldTest().start()-begin
YieldTest().start()-end
YieldTest().start()-begin
YieldTest-run-begin
YieldTest-1
YieldTest().start()-end
SleepTest().start()-begin
YieldTest-run-begin
YieldTest-1
SleepTest().start()-end
SleepTest().start()-begin
SleepTest().start()-end
SleepTest-run-begin
SleepTest-1 
SleepTest-run-begin
SleepTest-1
YieldTest-2
YieldTest-run-end
YieldTest-2
YieldTest-run-end
SleepTest-2
SleepTest-run-end
SleepTest-2
SleepTest-run-end

在这里插入图片描述
每次的运行结果可能都不太一样,就拿这次的来分析一下。可以看到第14行输出SleepTest-1,它是在YieldTest-1之后打印出来的,就是因为在System.out.println("YieldTest-1");之后执行了yield();方法,所以从YieldTest线程转换到了SleepTest线程。当然也有可能还是转换到YieldTest自己这个线程。


THE END.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值