学习多线程之yield方法

215 阅读2分钟

「这是我参与2022首次更文挑战的第22天,活动详情查看:2022首次更文挑战

写在前面

昨天的文章中,我们说过了多线程知识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方法有些不同之处,大家是否有所收获呢,明天我们接着来学习其他的多线程方法,共同成长吧。