Java yield()方法在多线程编程中的应用

目录

背景:

代码解释:

1.类定义

2.主方法(main)

3.自定义线程类(MyThread3)

总结:


背景:

在Java中,多线程是构建并发应用程序的关键技术。当我们多个线程需要同时执行时,操作系统必须决定何时为每个线程分配 CPU时。这个过程被称为线程调度,而Java提供一个yield()方法,它允许一个线程主动放弃当前占用的CPU资源,使得其他线程有机会获得执行。

代码解释:

1.类定义

public class TestYield { ... }  
class MyThread3 extends Thread { ... }

·TestYield类是主类,包含main方法,作为程序的入口点。

·MyThread3类是自定义的线程类,它继承了Java的Thread类

2.主方法(main)

public static void main(String[] args) {      
  MyThread3 t1 = new MyThread3("t1");      
  MyThread3 t2 = new MyThread3("t2");      
  t1.start();      
  t2.start();      
}

·在main方法中,我们创建了两个MyThread3类型的线程对象t1和t2

·使用new关键字和构造器为它们分配内存,并传入字符串参数作为线程的名称 

 ·调用start()方法启动线程 。注意,不是直接调用run()方法,因为start()会由JVM来调用run(),同时启动一个新的线程来执行run()方法

3.自定义线程类(MyThread3)

class MyThread3 extends Thread {      
  MyThread3(String s) {      
    super(s);      
  }      
    
  public void run() {      
    for (int i = 1; i <= 100; i++) {      
      System.out.println(getName() + ": " + i);      
      if (i % 10 == 0) {     
        Thread.yield();      
      }      
    }      
  }      
}

·MyThread3类继承了Thread类,因此它拥有Thread类的所有属性和方法

·构造器MyThread3(String s)接收一个字符串参数,并通过suprer(s)调用父类Thread的构造器来设置线程的名称

·run()方法是线程的主要逻辑,在这个例子中,我们有一个循环,从1迭代到100,在每次迭代中,我们打印出当前线程额名称和当前的迭代次数

·当迭代次数i是10的倍数时,我们调用Thread.yield()方法。这是告诉JVM,当前线程原因放弃CPU资源,以便其他线程可以得到执行的机会,但请注意,yield()只是一个建议,JVM可以选择忽略它

总结:

Java yield() 方法的表格总结:

属性/特点描述
方法名yield()
所属类java.lang.Thread
访问修饰符static
参数
返回值void(无返回值)
作用暂停当前正在执行的线程,以允许其他具有相同优先级的线程执行
线程状态变化从运行状态(Running)转为就绪状态(Ready)
释放锁否(不会释放锁)
阻塞线程否(不会阻塞线程)
调度器响应向线程调度器提出建议,但调度器不一定会立即响应
线程优先级仅影响同优先级或更高优先级的线程
示例用途在循环中或当线程不需要立即执行时使用,以改善线程调度
注意事项yield() 不保证当前线程会立即停止执行,也不保证其他线程会立即开始执行

虽然yield()并不能保证特定的线程执行顺序,但在多线程编程中,理解和正确使用yield()方法可以帮助我们更好地管理线程的执行,提升程序的并发性和响应性。然而,需要注意的是,过度使用yield()方法可能会导致线程切换过于频繁,进而引发性能问题。因此,在编写多线程程序时,我们应当根据具体的需求和场景,谨慎选择同步和协作机制,以达到最佳的并发性能和响应性。

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

空白_d

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值