java中sleep与 yield 区别

java

在多线程的使用中你会看到这个两个方法sleep()与yield()这两方法有什么作用呢?

请看下面案例演示

2.测试

package com.ldp.demo01;

import com.common.MyThreadUtil;

import lombok.extern.slf4j.Slf4j;

/**

* @author 姿势帝-博客园

* @address https://www.cnblogs.com/newAndHui/

* @WeChat 851298348

* @create 01/16 9:17

* @description <P>

* sleep 与 yield 区别

* sleep

* 1. 调用 sleep 会让当前线程从 Running 进入 Timed Waiting 状态(阻塞)

* 2. 其它线程可以使用 interrupt 方法打断正在睡眠的线程,这时 sleep 方法会抛出 InterruptedException

* 3. 睡眠结束后的线程未必会立刻得到执行

* yield

* 1. 调用 yield 会让当前线程从 Running 进入 Runnable 就绪状态,然后调度执行其它线程

* 2. 具体的实现依赖于操作系统的任务调度器

* </P>

*/

@Slf4j

public class Test02 {

/**

* sleep

*

* @param args

*/

public static void main01(String[] args) {

Thread t1 = new Thread(() -> {

try {

Thread.sleep(10 * 1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

}, "t1");

t1.start();

MyThreadUtil.sleep(1);

// 打断正在睡眠的线程,其它线程可以使用 interrupt 方法打断正在睡眠的线程,这时 sleep 方法会抛出 InterruptedException

t1.interrupt();

}

/**

* yield

*

* @param args

*/

public static void main(String[] args) {

Thread t1 = new Thread(() -> {

int n = 0;

while (true) {

n++;

log.debug("running....{}", n);

}

}, "t1");

Thread t2 = new Thread(() -> {

int n = 0;

while (true) {

n++;

// 调用 yield 会让当前线程从 Running 进入 Runnable 就绪状态,然后调度执行其它线程

// 通过有无让出代码观察n的变化快慢

Thread.currentThread().yield();

log.debug(" running....{}", n);

}

}, "t2");

MyThreadUtil.sleep(1);

t1.start();

t2.start();

}

}

完美

以上是 java中sleep与 yield 区别 的全部内容, 来源链接: utcz.com/z/394405.html

回到顶部