JUC——让步与优先级

发布时间 2023-11-30 22:12:17作者: 林浅

Thread.yield():方法作用是:暂停当前正在执行的线程对象(及放弃当前拥有的cup资源),并执行其他线程

yield():做的是让当前运行线程回到可运行的状态,以允许具有相同优先级的其他线程获得运行机会。因此,使用目的是让相同优先级的线程之间能适当的轮转执行。但是,实际中无法保证yield()达到让步的目的,因为让步的线程还有可能被线程调用程序再次选中。

yield方法并不能保证一定让出cup资源,他只是一个提示,告诉调度器当前线程愿意让出cpu资源。具体是否让出,还得由调度器决定。

setPriority

这个方法设置优先级:

MIN_PRIORITY
NORM_PRIORITY
MAX_PRIORITY

优先级由小到大,当你的资源足够时,这个没有什么太大用处

package org.example.test1;

import com.sun.org.apache.bcel.internal.generic.NEW;

public class YieldThread {
    public static void main(String[] args) {
        class Task1 implements Runnable{

            @Override
            public void run() {
                for (int j = 0; j < 200; j++) {
                    System.out.println("A:"+j);
                }
            }
        }
        class Task2 implements Runnable{

            @Override
            public void run() {
                for (int j = 0; j < 10; j++) {
                    Thread.yield();
                    System.out.println("B:"+j);
                }
            }

        }
        Thread thread1 = new Thread(new Task2());
        thread1.setPriority(Thread.MIN_PRIORITY);
        thread1.start();
        Thread thread2 = new Thread(new Task1());
        thread2.setPriority(Thread.MAX_PRIORITY);
        thread2.start();
    }
}