温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么在Java中利用yield实现线程让步

发布时间:2021-05-10 17:29:52 来源:亿速云 阅读:157 作者:Leah 栏目:编程语言

这期内容当中小编将会给大家带来有关怎么在Java中利用yield实现线程让步,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

Java的优点是什么

1. 简单,只需理解基本的概念,就可以编写适合于各种情况的应用程序;2. 面向对象;3. 分布性,Java是面向网络的语言;4. 鲁棒性,java提供自动垃圾收集来进行内存管理,防止程序员在管理内存时容易产生的错误。;5. 安全性,用于网络、分布环境下的Java必须防止病毒的入侵。6. 体系结构中立,只要安装了Java运行时系统,就可在任意处理器上运行。7. 可移植性,Java可以方便地移植到网络上的不同机器。8.解释执行,Java解释器直接对Java字节码进行解释执行。

一 点睛

yield()方法是一个和sleep()方法有点类似的方法,它是Thread类提供的一个静态方法,它也可以让当前正在执行的线程暂停,但它不会阻塞该线程,它只是让线程转入就绪状态。yield只是让当前线程暂停一下,让系统的线程调度器重新调度一次,完全可能的情况是:当某个线程调用了yield()方法后,线程调度器又将其调度出来重新执行。

当某个线程调用了yield方法暂停之后,只有优先级与当前线程相同,或者优先级比当前线程更高的处于就绪状态的线程才会获得执行的机会。

二 代码

public class YieldTest extends Thread
{
   public YieldTest(String name)
   {
      super(name);
   }
   // 定义run方法作为线程执行体
   public void run()
   {
      for (int i = 0; i < 50 ; i++ )
      {
        System.out.println(getName() + " " + i);
        // 当i等于20时,使用yield方法让当前线程让步
        if (i == 20)
        {
           Thread.yield();
        }
      }
   }
   public static void main(String[] args)throws Exception
   {
      // 启动两条并发线程
      YieldTest yt1 = new YieldTest("高级");
      // 将ty1线程设置成最高优先级
      //yt1.setPriority(Thread.MAX_PRIORITY);
      yt1.start();
      YieldTest yt2 = new YieldTest("低级");
      // 将yt2线程设置成最低优先级
      //yt2.setPriority(Thread.MIN_PRIORITY);
      yt2.start();
   }
}

三 运行

......
低级  18
低级  19
高级  15
低级  20
高级  16
高级  17
高级  18
高级  19
低级  21
高级  20
低级  22
低级  23
低级  24
低级  25
低级  26
...

四 说明

1 此时高级和低级两个线程优先级一样。

2 线程调用yield之后将执行机会让给优先级相同的其他线程。

五 代码2

public class YieldTest extends Thread
{
   public YieldTest(String name)
   {
      super(name);
   }
   // 定义run方法作为线程执行体
   public void run()
   {
      for (int i = 0; i < 50 ; i++ )
      {
        System.out.println(getName() + " " + i);
        // 当i等于20时,使用yield方法让当前线程让步
        if (i == 20)
        {
           Thread.yield();
        }
      }
   }
   public static void main(String[] args)throws Exception
   {
      // 启动两条并发线程
      YieldTest yt1 = new YieldTest("高级");
      // 将ty1线程设置成最高优先级
      yt1.setPriority(Thread.MAX_PRIORITY);
      yt1.start();
      YieldTest yt2 = new YieldTest("低级");
      // 将yt2线程设置成最低优先级
      yt2.setPriority(Thread.MIN_PRIORITY);
      yt2.start();
   }
}

六 运行2

高级  17
高级  18
高级  19
高级  20
高级  21
高级  22
高级  23
高级  24
高级  25
高级  26
高级  27
高级  28
......
高级  48
高级  49
低级  12
低级  13
低级  14
低级  15
低级  16
低级  17
低级  18
低级  19
低级  20
低级  21
低级  22
低级  23

上述就是小编为大家分享的怎么在Java中利用yield实现线程让步了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI