暂停线程执行常用的方法有 sleep()和 yield()方法,这两个方法的区别是: sleep()方法:可以让正在运行的线程进入阻塞状态,直到休眠时间满了,进入就绪状 态 yield()方法:可以让正在运
暂停线程执行常用的方法有 sleep()和 yield()方法,这两个方法的区别是:
sleep 方法的使用
package com.yqq.app12;import lombok.SneakyThrows;
/**
* @Author yqq
* @Date 2021/11/25 23:25
* @Version 1.0
*/
public class SleepRhread implements Runnable{
public void run() {
System.out.println(Thread.currentThread().getName()+"线程开始");
for (int i = 0; i < 20; i++) {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+" "+i);
}
System.out.println(Thread.currentThread().getName()+"线程结束");
}
public static void main(String[] args) {
Thread t1 = new Thread(new SleepRhread());
t1.start();
}
}
yield 方法的使用
yield()方法的作用:暂停当前正在执行的线程,并执行其他线程。 yield()让当前正在运行的线程回到可运行状态,以允许具有相同优先级的其他线程获得 运行的机会。因此,使用 yield()的目的是让具有相同优先级的线程之间能够适当的轮换执行。 但是,实际中无法保证 yield()达到让步的目的,因为,让步的线程可能被线程调度程序再次 选中。
使用 yield 方法时要注意的几点:
/**
* @Author yqq
* @Date 2021/11/25 23:16
* @Version 1.0
*/
public class YieldThread implements Runnable{
public void run() {
for (int i = 0; i < 20; i++) {
if ("Thread-0".equals(Thread.currentThread().getName()))
if (i==0)
Thread.yield();
System.out.println(Thread.currentThread().getName()+" "+i);
}
}
public static void main(String[] args) {
Thread t1 = new Thread(new YieldThread());
Thread t2 = new Thread(new YieldThread());
t1.start();
t2.start();
}
}