Java:线程礼让yield

  • 礼让线程,让当前正在执行的线程暂停,但不阻塞,将线程从运行状态转为就绪状态

  • 让cpu重新调度,礼让不一定成功!看CPU心情


例如:A线程、B线程在就绪状态同时竞争,CPU调度,让A线程先进入运行状态,但A线程礼让了,重新回到就绪状态,跟B线程再竞争一次。

package com.jiemyx.thread.demo02;

//测试礼让线程
//礼让不一定成功,看CPU心情
public class ThreadYield {
    public static void main(String[] args) {
        MyYieldA a = new MyYieldA();
        MyYieldB b = new MyYieldB();

        new Thread(a,"A线程").start();
        new Thread(b,"B线程").start();
    }
}

class MyYieldA implements Runnable{
    @Override
    public void run() {
        //Thread.currentThread().getName()获取线程的名字
        System.out.println(Thread.currentThread().getName() + "线程开始执行");
        Thread.yield(); //礼让
        System.out.println(Thread.currentThread().getName() + "线程停止执行");
    }
}

class MyYieldB implements Runnable{
    @Override
    public void run() {
        //Thread.currentThread().getName()获取线程的名字
        System.out.println(Thread.currentThread().getName() + "线程开始执行");
        System.out.println(Thread.currentThread().getName() + "线程停止执行");
    }
}

运行结果(礼让成功):

A线程线程开始执行
B线程线程开始执行
B线程线程停止执行
A线程线程停止执行


运行结果(礼让失败):

A线程线程开始执行
A线程线程停止执行
B线程线程开始执行
B线程线程停止执行


可能出现(这是因为线程之间是同时进行的,这里是B线程先运行)

B线程线程开始执行
B线程线程停止执行
A线程线程开始执行
A线程线程停止执行

上一篇:ReenterLock的基本理解


下一篇:java线程创建的4种方法