Java线程中yield()使用方法简介说明
下文笔者讲述java线程中yield方法的功能简介说明,如下所示
yield方法的功能
暂停当前正在执行的线程对象 并执行其他线程 注意事项 其他也包含当前线程例:
1.首先继承Thread实现一个子类YieldJava265Test,在它的run方法中执行yield()方法。 class YieldJava265Test extends Thread { public void run() { Thread.currentThread().setPriority(Thread.MIN_PRIORITY); System.out.println("YieldJava265Test-run-begin"); System.out.println("YieldJava265Test-1"); YieldAndSleep.calculate(); yield(); System.out.println("YieldJava265Test-2"); YieldAndSleep.calculate(); System.out.println("YieldJava265Test-run-end"); } } 2.然后继承Thread实现一个子类SleepJava265Test,在它的run方法中执行sleep方法,用来对比yield方法。 class SleepJava265Test extends Thread { public void run() { Thread.currentThread().setPriority(Thread.MAX_PRIORITY); System.out.println("SleepJava265Test-run-begin"); System.out.println("SleepJava265Test-1"); YieldAndSleep.calculate(); try{ sleep(1000); } catch (Exception e) {} System.out.println("SleepJava265Test-2"); YieldAndSleep.calculate(); System.out.println("SleepJava265Test-run-end"); } } 3.最后分别启动两个YieldJava265Test线程和两个SleepJava265Test线程,观察它们的运行状况 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("YieldJava265Test().start()-begin"); new YieldJava265Test().start(); System.out.println("YieldJava265Test().start()-end"); } for (int i = 1; i <= 2; i++) { System.out.println("SleepJava265Test().start()-begin"); new SleepJava265Test().start(); System.out.println("SleepJava265Test().start()-end"); } } } 4.看一下运行的结果 YieldJava265Test().start()-begin YieldJava265Test().start()-end YieldJava265Test().start()-begin YieldJava265Test-run-begin YieldJava265Test-1 YieldJava265Test().start()-end SleepJava265Test().start()-begin YieldJava265Test-run-begin YieldJava265Test-1 SleepJava265Test().start()-end SleepJava265Test().start()-begin SleepJava265Test().start()-end SleepJava265Test-run-begin SleepJava265Test-1 SleepJava265Test-run-begin SleepJava265Test-1 YieldJava265Test-2 YieldJava265Test-run-end YieldJava265Test-2 YieldJava265Test-run-end SleepJava265Test-2 SleepJava265Test-run-end SleepJava265Test-2 SleepJava265Test-run-end 每次的运行结果可能都不太一样 就拿这次的来分析一下 可以看到第14行输出SleepJava265Test-1 它是在YieldJava265Test-1之后打印出来的 就是因为在System.out.println("YieldJava265Test-1"); 之后执行了yield();方法 所以从YieldJava265Test线程转换到了SleepJava265Test线程 当然也有可能还是转换到YieldJava265Test自己这个线程。
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。