JUC——让步与优先级
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();
}
}