6 sleep与yield的比较

打印 上一主题 下一主题

主题 1944|帖子 1944|积分 5832

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
6 sleep与yield的比较

sleep


  • 调用 sleep 会让当前线程从 Running 进入 Timed Waiting 状态(阻塞)
  • 其它线程可以使用 interrupt 方法打断正在睡眠的线程,这时 sleep 方法会抛出 InterruptedException
  • 睡眠结束后的线程未必会立刻得到执行
  • 建议用 TimeUnit 的 sleep 代替 Thread 的 sleep 来获得更好的可读性
yield


  • 调用 yield 会让当前线程从 Running 进入 Runnable 就绪状态,然后调度执行其它线程 。同时,该线程在就绪状态时,CPU可能会分配资源给它,使其进入运行态。
  • 具体的实现依赖于操作系统的任务调度器
yield和线程优先级代码实例

  1. //代码实例
  2. public class YieldAndPriority {
  3.    public static void main(String[] args) {
  4.        Runnable task1 = new Runnable() {
  5.            @Override
  6.            public void run() {
  7.                int count = 0;
  8.                //yield,让线程进入就绪态,CPU可能会调度该线程,使得该线程变为执行状态
  9.                Thread.yield();
  10.                while (true) {
  11.                    System.out.println("-------> task1 count=" + count++);
  12.                }
  13.            }
  14.        };
  15.        Runnable task2 = new Runnable() {
  16.            @Override
  17.            public void run() {
  18.                int count = 0;
  19.                while (true) {
  20.                    System.out.println("                            --------------------------------------> task2 count=" + count++);
  21.                }
  22.            }
  23.        };
  24.        Thread t1 = new Thread(task1, "t1");
  25.        Thread t2 = new Thread(task2, "t2");
  26.        //设置优先级1-10 越大优先级越高
  27.        t1.setPriority(1);
  28.        t2.setPriority(10);
  29.        t1.start();
  30.        t2.start();
  31.    }
  32. }
复制代码
  1. //输出结果
  2. ...
  3. --------------------------------------> task2 count=34436
  4. --------------------------------------> task2 count=34437
  5. --------------------------------------> task2 count=34438
  6. --------------------------------------> task2 count=34439
  7. --------------------------------------> task2 count=34440
  8. --------------------------------------> task2 count=34441
  9. --------------------------------------> task2 count=34442
  10. --------------------------------------> task2 count=34443
  11. --------------------------------------> task2 count=34444
  12. -------> task1 count=42407
  13. -------> task1 count=42408
  14. -------> task1 count=42409
  15. -------> task1 count=42410
  16. -------> task1 count=42411
  17. -------> task1 count=42412
  18. -------> task1 count=42413
  19. -------> task1 count=42414
  20. -------> task1 count=42415
  21. -------> task1 count=42416
  22. 进程已结束,退出代码130
复制代码

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

去皮卡多

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表