Java编程语言中sleep()和yield()的区别

开发 后端
Java编程语言在我们使用的时候需要注意很多的东西,下面我们就看看如何才能将sleep()和yield()的区别开?希望大家有所帮助。

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. }  

 

运行结果为:

 

  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编程语言的相关介绍,希望大家有所帮助。

【编辑推荐】

  1. 初学Java多线程:用Thread类创建线程
  2. 初学Java多线程:线程简介
  3. 深入浅出Java多线程程序设计
  4. 初学Java多线程:使用Runnable接口创建线程
  5. Java多线程如何才能协调好生产和消费的关系
责任编辑:张浩 来源: 互联网
相关推荐

2009-04-30 15:15:01

Java抽象类接口

2010-03-15 18:25:27

Java编程语言

2011-05-26 15:52:31

sleep()wait()

2011-12-25 15:35:05

ibmdwJavaC++

2009-06-18 12:37:26

java编程语言

2024-01-08 07:02:48

数据设计模式

2021-01-21 09:23:35

Java语言

2024-01-05 08:31:08

C语言

2024-03-26 11:54:35

编程抽象代码

2022-08-26 09:51:49

索引签名编程语言

2009-06-12 15:01:48

Java数组Java教程

2023-04-28 07:49:13

Javawaitsleep

2010-03-26 17:34:29

Python历史

2022-02-21 09:33:31

接口继承Java语言

2013-06-27 10:31:39

2009-06-12 14:18:20

构造方法Java语言Java教程

2012-06-15 09:56:40

2023-12-30 18:35:37

Go识别应用程序

2023-11-21 15:46:13

Go内存泄漏

2010-03-11 15:16:52

Python编程语言
点赞
收藏

51CTO技术栈公众号