sleep和yield的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sleep和yield的区别相关的知识,希望对你有一定的参考价值。

yield和sleep的区别:

yield和sleep的主要是,yield方法会临时暂停当前正在执行的线程,来让有同样优先级的正在等待的线程有机会执行。

如果没有正在等待的线程,或者所有正在等待的线程的优先级都比较低,那么该线程会继续运行。执行了yield方法的线程什么时候会继续运行由线程调度器来决定,不同的厂商可能有不同的行为。

yield方法不保证当前的线程会暂停或者停止,但是可以保证当前线程在调用yield方法时会放弃CPU。

Java中wait、sleep的区别或者Java中sleep、yield的区别是Java面试或者多线程面试中最常问的问题之一。在这3个在Java中能够用来暂停线程的方法中,sleep和yield方法是定义在Thread类中,而wait方法是定义在Object类中的, 这也是面试中常问的一个问题。

wait和sleep的关键的区别在于,wait是用于线程间通信的,而sleep是用于短时间暂停当前线程。更加明显的一个区别在于,当一个线程调用wait方法的时候,会释放它锁持有的对象的管程和锁,但是调用sleep()方法的时候,不会释放他所持有的管程。

回到yield()方法上来,与wait和sleep方法有一些区别,它仅仅释放线程所占有的CPU资源,从而让其他线程有机会运行,但是并不能保证某个特定的线程能够获得CPU资源。

谁能获得CPU完全取决于调度器,在有些情况下调用yield方法的线程甚至会再次得到CPU资源。所以,依赖于yield方法是不可靠的,它只能尽力而为。

以上内容参考:百度百科--Java编程语言

参考技术A Java编程语言在使用中有很多需要我们学习的,下面我们就来看看sleep()和yield()之间的区别,希望大家在详细学习中有所收获。只有在不断的学习才能更好的使用。
1) sleep()使当前线程进入停滞状态,所以执行sleep()的线程在指定的时间内肯定不会执行;yield()只是使当前线程重新回到可执行状态,所以执行yield()的线程有可能在进入到可执行状态后马上又被执行。
2) sleep()可使优先级低的线程得到执行的机会,当然也可以让同优先级和高优先级的线程有执行的机会;yield()只能使同优先级的线程有执行的机会。
1. class TestThreadMethod extends Thread
2. public static int shareVar = 0;
3. public TestThreadMethod(String name)
4. super(name);
5.
6. public void run()
7. for(int i=0; i<4; i++)
8. System.out.print(Thread.currentThread().getName());
9. System.out.println(" : " + i);
10. //Thread.yield(); (1)
11. /* (2) */
12. try
13. Thread.sleep(3000);
14.
15. catch(InterruptedException e)
16. System.out.println("Interrupted");
17.
18.
19. public class TestThread
20. public static void main(String[] args)
21. TestThreadMethod t1 = new TestThreadMethod("t1");
22. TestThreadMethod t2 = new TestThreadMethod("t2");
23. t1.setPriority(Thread.MAX_PRIORITY);
24. t2.setPriority(Thread.MIN_PRIORITY);
25. t1.start();
26. t2.start();
27.
28.
运行结果为:
1. t1 : 0
2. t1 : 1
3. t2 : 0
4. t1 : 2
5. t2 : 1
6. t1 : 3
7. t2 : 2
8. t2 : 3
由结果可见,通过sleep()可使优先级较低的线程有执行的机会。注释掉代码(2),并去掉代码(1)的注释,结果为:
1. t1 : 0
2. t1 : 1
3. t1 : 2
4. t1 : 3
5. t2 : 0
6. t2 : 1
7. t2 : 2
8. t2 : 3
可见,调用yield(),不同优先级的线程永远不会得到执行机会。
以上就是对Java编程语言的相关介绍,希望大家有所帮助。
来源:51CTO 作者:不详

希望可以帮到你,谢谢,望采纳。本回答被提问者和网友采纳
参考技术B 睡觉 田野

爬虫:Scrapy 中 yield 和 return 的区别

参考技术A 在 scrapy 中 yield 经常被使用,典型的应用场景包括以下两种:

以上是关于sleep和yield的区别的主要内容,如果未能解决你的问题,请参考以下文章

多线程学习-基础sleep()和yield()的区别(理论)

sleep()方法和yield()方法的区别

线程的sleep()方法和yield()方法区别

线程的 sleep()方法和 yield()方法有什么区别?

线程的 sleep()方法和 yield()方法有什么区别?

线程的sleep()方法和yield()方法有什么区别?