学习多线程之yield方法

简介: 学习多线程之yield方法

写在前面


昨天的文章中,我们说过了多线程知识join方法的具体使用方法,不知道是否有人看到了,那么今天我们要来学习另外一个多线程知识了。

yield方法,也是多线程编程的一个使用非常频繁,且非常关键的一个方法,下面一起来学习一下吧。


学习多线程之yield方法


yield方法,本身其实是一个native方法,不同于join方法,join方法的源头是Thread类下的一个方法,而yield方法是一个native方法,虽然由java来使用,但并不是由java来实现,是由外部封装的原始方法。

下面我们来说一下这个方法的用法吧。

yield方法提供了一个暂停线程的功能,说详细点就是,将当前线程暂停,将服务器本身的资源让给其他线程来运行。

让我们来看一下yield到底是如何使用的吧。代码如下所示:

public static void main(String[] args) throws InterruptedException {
    Thread thread = new Thread(new Runnable() {
        @SneakyThrows
        @Override
        public void run() {
            for (int i = 0; i < 10; i++){
                if (i != 5){
                    Thread.yield();
                }
                System.out.println(i);
            }
        }
    });
    Thread thread1 = new Thread(new Runnable() {
        @SneakyThrows
        @Override
        public void run() {
            for (int i = 0; i > -10; i--){
                System.out.println(i);
            }
        }
    });
    thread.start();
    thread1.start();
}

通过代码,我们可以得到以下的结果。

0
-1
-2
-3
-4
-5
-6
-7
-8
-9
0
1
2
3
4
5
6
7
8
9

代码执行完成后,我们就要解释一下这个代码是什么意思了,单看代码恐怕有些难以理解。

代码中,我们首先是创建了两个线程,一个线程来打印1到10的数字。另外一个线程来打印负1到负10。

在线程1中打印到5的时候开始执行yield方法,服务器暂停了该线程,继而运行线程2。

所以才得到了这个结果。


总结


今天我们学习了多线程中的yield方法,了解了一下和join方法有些不同之处,大家是否有所收获呢,明天我们接着来学习其他的多线程方法,共同成长吧。


相关文章
|
1月前
|
监控 Java 调度
【Java学习】多线程&JUC万字超详解
本文详细介绍了多线程的概念和三种实现方式,还有一些常见的成员方法,CPU的调动方式,多线程的生命周期,还有线程安全问题,锁和死锁的概念,以及等待唤醒机制,阻塞队列,多线程的六种状态,线程池等
105 6
【Java学习】多线程&JUC万字超详解
|
1月前
|
存储 Java 程序员
优化Java多线程应用:是创建Thread对象直接调用start()方法?还是用个变量调用?
这篇文章探讨了Java中两种创建和启动线程的方法,并分析了它们的区别。作者建议直接调用 `Thread` 对象的 `start()` 方法,而非保持强引用,以避免内存泄漏、简化线程生命周期管理,并减少不必要的线程控制。文章详细解释了这种方法在使用 `ThreadLocal` 时的优势,并提供了代码示例。作者洛小豆,文章来源于稀土掘金。
|
2月前
|
算法 安全 Java
三种方法教你实现多线程交替打印ABC,干货满满!
本文介绍了多线程编程中的经典问题——多线程交替打印ABC。通过三种方法实现:使用`wait()`和`notify()`、`ReentrantLock`与`Condition`、以及`Semaphore`。每种方法详细讲解了实现步骤和代码示例,帮助读者理解和掌握线程间的同步与互斥,有效解决并发问题。适合不同层次的开发者学习参考。
44 11
|
1月前
|
Java Spring
运行@Async注解的方法的线程池
自定义@Async注解线程池
56 3
|
2月前
|
安全 Java API
|
2月前
|
Java
java开启线程的四种方法
这篇文章介绍了Java中开启线程的四种方法,包括继承Thread类、实现Runnable接口、实现Callable接口和创建线程池,每种方法都提供了代码实现和测试结果。
java开启线程的四种方法
【多线程面试题 二】、 说说Thread类的常用方法
Thread类的常用方法包括构造方法(如Thread()、Thread(Runnable target)等)、静态方法(如currentThread()、sleep(long millis)、yield()等)和实例方法(如getId()、getName()、interrupt()、join()等),用于线程的创建、控制和管理。
|
2月前
|
Dart API C语言
Dart ffi 使用问题之想在C/C++中创建异步线程来调用Dart方法,如何操作
Dart ffi 使用问题之想在C/C++中创建异步线程来调用Dart方法,如何操作
|
2月前
|
Java UED
基于SpringBoot自定义线程池实现多线程执行方法,以及多线程之间的协调和同步
这篇文章介绍了在SpringBoot项目中如何自定义线程池来实现多线程执行方法,并探讨了多线程之间的协调和同步问题,提供了相关的示例代码。
264 0
|
3月前
|
Java
不自定义异步方法的线程池默认使用SimpleAsyncTaskExecutor
不自定义异步方法的线程池默认使用SimpleAsyncTaskExecutor