6 sleep与yield的比较
  x55EaCXN8gFT 2023年11月01日 32 0

6 sleep与yield的比较

sleep

  1. 调用 sleep 会让当前线程从 Running 进入 Timed Waiting 状态(阻塞)

  2. 其它线程可以使用 interrupt 方法打断正在睡眠的线程,这时 sleep 方法会抛出 InterruptedException

  3. 睡眠结束后的线程未必会立刻得到执行

  4. 建议用 TimeUnit 的 sleep 代替 Thread 的 sleep 来获得更好的可读性

yield

  1. 调用 yield 会让当前线程从 Running 进入 Runnable 就绪状态,然后调度执行其它线程 。同时,该线程在就绪状态时,CPU可能会分配资源给它,使其进入运行态。

  2. 具体的实现依赖于操作系统的任务调度器

yield和线程优先级代码实例

//代码实例
public class YieldAndPriority {

   public static void main(String[] args) {
       Runnable task1 = new Runnable() {
           @Override
           public void run() {
               int count = 0;
               //yield,让线程进入就绪态,CPU可能会调度该线程,使得该线程变为执行状态
               Thread.yield();
               while (true) {
                   System.out.println("-------> task1 count=" + count++);
               }
           }
       };

       Runnable task2 = new Runnable() {
           @Override
           public void run() {
               int count = 0;
               while (true) {
                   System.out.println("                            --------------------------------------> task2 count=" + count++);
               }
           }
       };

       Thread t1 = new Thread(task1, "t1");
       Thread t2 = new Thread(task2, "t2");
       //设置优先级1-10 越大优先级越高
       t1.setPriority(1);
       t2.setPriority(10);

       t1.start();
       t2.start();
   }
}

//输出结果
...
--------------------------------------> task2 count=34436
--------------------------------------> task2 count=34437
--------------------------------------> task2 count=34438
--------------------------------------> task2 count=34439
--------------------------------------> task2 count=34440
--------------------------------------> task2 count=34441
--------------------------------------> task2 count=34442
--------------------------------------> task2 count=34443
--------------------------------------> task2 count=34444
-------> task1 count=42407
-------> task1 count=42408
-------> task1 count=42409
-------> task1 count=42410
-------> task1 count=42411
-------> task1 count=42412
-------> task1 count=42413
-------> task1 count=42414
-------> task1 count=42415
-------> task1 count=42416

进程已结束,退出代码130

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  2Vtxr3XfwhHq   2024年05月17日   55   0   0 Java
  Tnh5bgG19sRf   2024年05月20日   110   0   0 Java
  8s1LUHPryisj   2024年05月17日   46   0   0 Java
  aRSRdgycpgWt   2024年05月17日   47   0   0 Java
x55EaCXN8gFT
作者其他文章 更多