多线程学习:day5 线程礼让

  1. 线程礼让,让当前正在执行的线程暂停,但不阻塞;
  2. 将线程从运行状态转为就绪状态;
  3. 让CPU重新调度,礼让不一定成功,看CPU心情。

线程的礼让:举例来就说就是有A线程和B线程要进入“房子里面‘,而A线程里面是带了”礼让方法“的,所以当A线程进入”房子“里面之后,触发礼让先不运行,而是作为就绪状态,让B线程也进入就绪状态,再让CPU去调用。所以,A线程有了”礼让方法“也不一定

5.1  创建一个类实现Runnable接口,alt+enter快捷键创建run方法,然后在run方法里面实现简单的执行逻辑 ,并使用yield()方法,看看第一条进入线程执行的会不会礼让

class MyYield implements  Runnable{

    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName() + "线程开始执行");
        Thread.yield(); // 礼让
        System.out.println(Thread.currentThread().getName() + "线程停止执行");
    }
}

5.2 创建一个main类,并引入刚刚外面创建好的实现Runnable接口的类,开启线程,给线程取名

(因为我在实现Runnable接口的类中使用了Thread的获取线程名称的方法

public class TestYield {
    public static void main(String[] args) {
        MyYield liuhaobin = new MyYield();
        new Thread(liuhaobin,"刘").start(); //看看刘会不会礼让
        new Thread(liuhaobin,"谢").start();
    }
}

结果分析

由于我们的代码规定“刘”线程先被调取,所以我们看“刘”线程会不会礼让后面的“谢”线程就行,很明显我们看到,此次结果是“谢”线程先开始执行,说明礼让成功,但不一定每次都会被礼让

这次就没礼让成功

以下为简单的礼让测试完整代码

//测试礼让线程
//礼让不一定成功,看cpu心情
public class TestYield {
    public static void main(String[] args) {
        MyYield liuhaobin = new MyYield();
        new Thread(liuhaobin,"刘").start(); //看看刘会不会礼让
        new Thread(liuhaobin,"谢").start();
    }
}


class MyYield implements  Runnable{

    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName() + "线程开始执行");
        Thread.yield(); // 礼让
        System.out.println(Thread.currentThread().getName() + "线程停止执行");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值