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

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

创新互联公司是一家专注于成都网站制作、成都网站设计、外贸营销网站建设与策划设计,宁夏网站建设哪家好?创新互联公司做网站,专注于网站建设十多年,网设计领域的专业建站公司;建站业务涵盖:宁夏等地区。宁夏做网站价格咨询:18982081108

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实现线程让步了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注创新互联行业资讯频道。


当前标题:怎么在Java中利用yield实现线程让步
转载来源:http://myzitong.com/article/jehhde.html