初学线程休眠和礼让

Posted 做个机灵鬼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初学线程休眠和礼让相关的知识,希望对你有一定的参考价值。

线程休眠,sleep()

1、休眠可以使一个线程暂缓处理,休眠时间一到程序就会唤醒继续执行,在Thread类中定义的休眠方法如下:

休眠方法一:public static void sleep(long millis) throws
InterruptedException; 休眠方法二:public static void sleep(long millis,int
nanos) throws InterruptedException;
2、在进行休眠的时候有可能会产生中断异常“InterruptedException”,中断异常属于Excepton的子类。

//模拟倒计时
public class textsleep {
    public static void main(String[] args) {
        try {
            TextDown();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    //模拟计时器
    public static void TextDown() throws InterruptedException {
        int num = 10;
        while (true){
            Thread.sleep(1000);//sleep会有异常,这里可以抛出异常
            System.out.println(num--);
            if(num<=0){
                break;
            }
        }
    }
}

进行倒计时
在这里插入图片描述

线程礼让,yield()

1、线程礼让指的是先将资源让出去让别的线程先执行,但每次礼让执行的时候只礼让一次。使用Thread类中的yield()方法
2.线程礼让不一定成功,需要看cpu调度

public class TextYield {
    public static void main(String[] args) {
        MyYield myYield = new MyYield();
        new Thread(myYield,"线程1").start();
        new Thread(myYield,"线程2").start();
    }

}
//线程礼让
 class MyYield implements Runnable{
    @Override
    public void run() {
        //获取线程名字
        System.out.println(Thread.currentThread().getName()+"开始执行");
        Thread.yield();//线程礼让 不一定成功,看cpu调度
        System.out.println(Thread.currentThread().getName()+"结束");
    }
}

在这里插入图片描述
如果没有线程礼让,那么在执行线程开始接着就是线性结束,这里线程礼让成

以上是关于初学线程休眠和礼让的主要内容,如果未能解决你的问题,请参考以下文章

多线程(线程的状态终止休眠礼让合并)

Java多线程学习笔记— “Thread类三个方法:线程休眠sleep()线程礼让yield()线程强制执行join()”

多线程-4

Java 线程基础

090_多线程

线程礼让(yield)