Java线程让步yield用法实例分析

所属分类: 软件编程 / java 阅读数: 36
收藏 0 赞 0 分享

本文实例讲述了Java线程让步yield用法。分享给大家供大家参考,具体如下:

一 点睛

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

七 说明2

1 两个线程的优先级不同。

2 高优先级的线程调用yield方法暂停之后,系统没有与之优先级相同,或更高优先级的线程,所以该线程继续执行。

更多java相关内容感兴趣的读者可查看本站专题:《Java进程与线程操作技巧总结》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总

希望本文所述对大家java程序设计有所帮助。

更多精彩内容其他人还在看

Springmvc restful配置遇到的小坑

本文是小编给大家带了的Springmvc restful配置遇到的小小坑,小编给大家带来了问题原因及解决办法,非常不错,具有参考借鉴价值,感兴趣的朋友一起看下吧
收藏 0 赞 0 分享

Java中的匿名内部类小结

java内部类分为: 成员内部类、静态嵌套类、方法内部类、匿名内部类。这篇文章主要介绍了Java中的匿名内部类的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

Java的云打印Lodop

这篇文章主要介绍了Java的云打印Lodop 的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Java线程池框架核心代码解析

这篇文章主要针对Java线程池框架核心代码进行详细解析,分析Java线程池框架的实现ThreadPoolExecutor,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Java 交换两个变量的数值实现方法

下面小编就为大家带来一篇Java 交换两个变量的数值实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

全面了解JAVA_BaseDAO数据处理类

下面小编就为大家带来一篇全面了解JAVA_BaseDAO数据处理类。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

java、python、JavaScript以及jquery循环语句的区别

本篇文章主要介绍java、python、JavaScript以及jquery的循环语句的区别,这里整理了它们循环语句语法跟示例,以便大家阅读,更好的区分它们的不同
收藏 0 赞 0 分享

基于JDBC封装的BaseDao(实例代码)

下面小编就为大家带来一篇基于JDBC封装的BaseDao(实例代码)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

简单通用JDBC辅助类封装(实例)

下面小编就为大家带来一篇简单通用JDBC辅助类封装(实例)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

浅谈java线程中生产者与消费者的问题

下面小编就为大家带来一篇浅谈java线程中生产者与消费者的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享
查看更多