sleep与yield的区别

网友投稿 1835 2022-11-05

sleep与yield的区别

sleep与yield的区别

暂停线程执行常用的方法有 sleep()和 yield()方法,这两个方法的区别是:

sleep()方法:可以让正在运行的线程进入阻塞状态,直到休眠时间满了,进入就绪状 态yield()方法:可以让正在运行的线程直接进入就绪状态,让出 CPU 的使用权。

sleep 方法的使用

package com.yqq.app12;import lombok.SneakyThrows;/** * @Author yqq * @Date 2021/11/25 23:25 * @Version 1.0 */public class SleepRhread implements Runnable{ @Override 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 方法时要注意的几点:

yield 是一个静态的方法。调用 yield 后,yield 告诉当前线程把运行机会交给具有相同优先级的线程。yield 不能保证,当前线程迅速从运行状态切换到就绪状态。yield 只能是将当前线程从运行状态转换到就绪状态,而不能是等待或者阻塞状态。

package com.yqq.app12;/** * @Author yqq * @Date 2021/11/25 23:16 * @Version 1.0 */public class YieldThread implements Runnable{ @Override 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(); }}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:LKImageKit 是一个高性能的图片框架,包括了图片控件,图片下载等
下一篇:终止线程的优选并不是stop()与destroy()
相关文章

 发表评论

暂时没有评论,来抢沙发吧~