1) sleep()使当前线程进入停滞状态,所以执行sleep()的线程在指定的时间内肯定不会执行;
yield()只是使当前线程重新回到可执行状态(yield只是屈服一个同级的对手,也可以说是让一下它们),所以执行yield()的线程有可能在进入到可执行状态后马上又被执行。
2) sleep()可使优先级低的线程得到执行的机会,当然也可以让同优先级和高优先级的线程有执行的机会;
yield()只能使同优先级的线程有执行的机会。
public class ThreadTest implements Runnable{
public void run(){
for(int k=0;k<10;k++){
if(k == 5 && Thread.currentThread().getName().equals("t1")){
Thread.yield();
}
System.out.println(Thread.currentThread().getName()+ " : " + k);
}
}
public static void main(String[] args) {
Runnable r = new ThreadTest();
Thread t1 = new Thread(r,"t1");
Thread t2 = new Thread(r,"t2");
t1.setPriority(Thread.MAX_PRIORITY);
t2.setPriority(Thread.MIN_PRIORITY);
t1.start();
t2.start();
}
}
输出结果:
t1 : 0
t1 : 1
t1 : 2
t1 : 3
t1 : 4
t1 : 5
t1 : 6
t1 : 7
t1 : 8
t1 : 9
t2 : 0
t2 : 1
t2 : 2
t2 : 3
t2 : 4
t2 : 5
t2 : 6
t2 : 7
t2 : 8
t2 : 9
多次运行这个程序,输出也是一样。这说明:
yield()方法不会使不同优先级的线程有执行的机会。
分享到:
相关推荐
`sleep`, `yield`, 和 `wait` 是 Java 中用于线程管理的三个重要方法,它们各自有着不同的功能和用途。理解它们的区别有助于编写出更加高效和可控的多线程程序。 1. **sleep() 方法** - `Thread.sleep(millisecond...
T03_Sleep_Yield_Join.java
本文将深入探讨Java中的四个关键方法:`sleep()`, `wait()`, `yield()`和`join()`,以及它们各自的特点和区别。 首先,我们来看`sleep()`和`wait()`的区别: 1. **来源不同**:`sleep()`是`Thread`类的方法,它...
本文将总结五个关键的线程控制方法:wait()、await()、sleep()、yield()和join()。这些方法各自有独特的用途和不同的工作机制。 一、wait()、notify()、notifyAll()用法 wait()、notify()和notifyAll()是Object类...
Java中的多线程编程涉及到许多关键概念,包括`yield()`, `sleep()`, 和 `wait()`,这些都是控制线程执行的重要方法。理解它们的区别对于编写高效并发程序至关重要。 首先,`yield()`方法的作用是让当前正在执行的...
本文将详细解析线程中`sleep()`, `join()`, `yield()`, 和 `wait()` 四个方法的区别。 1. `sleep()` `sleep()` 方法是 `java.lang.Thread` 类的一个静态方法,它允许当前正在执行的线程在指定的毫秒数内暂停执行。...
"高薪程序员面试题精讲系列63之说说sleep()、yield()、join()、wait()的区别" 本资源主要讲解了Java中四个常用的线程控制方法:sleep()、yield()、join()和wait(),它们是Java多线程编程中的重要...
`start()` 和 `run()` 方法的区别在于 `start()` 方法会使得线程进入就绪状态,等待CPU调度,而 `run()` 方法则是在调用它的线程中直接执行该方法的内容。在安卓开发中,合理管理线程对于提升应用性能和用户体验至关...
在Java多线程编程中,`Thread.sleep()`、中断机制以及`Thread.yield()`方法都是控制线程行为的重要工具。接下来我们将深入探讨这三个知识点,并通过示例代码来展示它们的实际应用。 一、`Thread.sleep()`方法 `...
线程的基本概念、线程类、任务类、线程优先级、sleep()方法(休眠)、yield()方法(礼让)、join方法(合并)、interrupt()方法(中断),线程的生命周期 线程 与 进程 的关系:**有一个进程中至少包含一个线程 **...
之前,我讨论了一个wait()和sleep()方法区别的问题,这一次,我将会讨论join()和yield()方法的区别。坦白的说,实际上我并没有用过其中任何一个方法,所以,如果你感觉有不恰当的地方,请提出讨论。 Java线程调度...
原版的`timer_sleep`函数采用了忙等待的方式,在这种方式下,线程会不断检查当前时间并调用`thread_yield()`直到达到预定的睡眠时间。这种方法虽然简单直接,但会消耗大量CPU资源,降低系统效率。 **实现细节** ...
yield()方法是一个和sleep()方法有点类似的方法,它是Thread类提供的一个静态方法,它也可以让当前正在执行的线程暂停,但它不会阻塞该线程,它只是让线程转入就绪状态。yield只是让当前线程暂停一下,让系统的线程...
`yield()`和`wait()`的一个主要区别在于,`yield()`仅将线程状态从运行变为就绪,而不涉及同步锁的释放;而`wait()`则会让线程进入等待状态并释放锁,以便其他线程能够获得锁并执行同步代码。 线程休眠`sleep()`...
需要注意的是,`yield()`并不会像`sleep()`或`join()`那样使线程进入等待状态,而是让线程回到可运行状态,这意味着线程仍然可以随时被调度执行。 使用`yield()`的主要目的是提高线程的公平性,尤其是当有多个线程...
通过上述分析我们可以看到,`yield` 和 `asyncio` 提供了强大的工具来实现异步操作。无论是简单的数据生产和消费场景还是复杂的多任务并发环境,这些工具都能够帮助开发者更加高效地编写出高性能的代码。
但在JavaScript的单线程模型中,直接使用`sleep`会导致整个浏览器或Node.js应用变得无响应,因为它会阻止事件循环处理其他任务,包括用户交互和UI更新。 二、为何需要`sleep`函数? 在JavaScript中,通常使用`...
本小结主要探讨`Thread`类的`sleep`和`yield`方法。 1. `sleep`方法: `Thread.sleep(long millis)`和`Thread.sleep(long millis, int nanos)`这两个方法用于使当前线程进入休眠状态,不释放任何锁资源。休眠时间...
本文将详细讨论`yield()`, `sleep()`, 和`wait()`这三个与线程控制密切相关的函数,以及它们之间的区别。 首先,`yield()`方法是让当前线程主动放弃CPU执行权,将其放回到就绪队列的尾部,但并不保证立即执行其他...
#### 七、yield与return的区别 在生成器函数中,`return` 语句可以用来提前结束生成器。一旦执行了 `return`,生成器就会被关闭。与之相对的是,`yield` 语句可以返回一个值,但不会结束生成器,而是暂停执行,等待...