java线程sleep yield_java-多线程的sleep方法和yield方法有什么区别?

java-多线程的sleep方法和yield方法有什么区别?

当当前正在执行的线程遇到调用[sleep][1]();时,线程立即进入睡眠状态至于[yield][2]();线程进入可运行状态/就绪状态

10个解决方案

125 votes

我们可以使用Thread类的3种方法中的任何一种来阻止线程执行:

sleep()

sleep()

sleep()

sleep()方法会暂时暂停当前正在执行的线程,以便有机会让其余等待优先级相同的线程执行。 如果没有等待线程或所有等待线程的优先级都较低,则同一线程将继续执行。 产生的线程何时有机会执行由线程调度程序决定,该线程的行为取决于供应商。

2702675141175280280如果正在执行的线程t1在t2上调用join(),即; t2.join() t1将立即进入等待状态,直到t2完成其执行。

sleep()根据我们的要求,我们可以使线程在指定的时间段内处于休眠状态(希望我们的最喜欢的方法不需要太多解释)。

Anantha Krishnan answered 2020-01-14T19:23:56Z

90 votes

yield()导致线程在给定的时间内肯定停止执行; 如果不需要运行其他线程或进程,则CPU将处于空闲状态(并可能进入节能模式)。

yield()基本上意味着线程没有做任何特别重要的事情,如果需要运行任何其他线程或进程,则应该这样做。 否则,当前线程将继续运行。

Michael Borgwardt answered 2020-01-14T19:21:16Z

29 votes

Sleep()使当前正在执行的线程进入睡眠状态(暂时停止执行)。

Yield()导致当前正在执行的线程对象暂时暂停并允许其他线程执行。

阅读此内容可以很好地说明该主题。

Kazekage Gaara answered 2020-01-14T19:24:25Z

5 votes

Yield:将使线程等待当前正在执行的线程,并且调用yield()的线程将在线程执行结束时附加自身。 调用yield()的线程将一直处于阻塞状态。

Sleep:将导致线程在参数中提到的时间段内进入睡眠模式。

Join:t1和t2是两个线程,调用t2.join(),然后t1进入等待状态,直到t2完成执行。 然后t1将进入可运行状态,然后我们的专业JVM线程调度程序将根据条件选择t1。

Preetham answered 2020-01-14T19:24:54Z

4 votes

睡眠会使线程自行挂起x毫秒,而yield会使线程挂起并立即将其移至就绪队列(CPU用于运行线程的队列)。

giorashc answered 2020-01-14T19:25:14Z

2 votes

Yield():方法将停止当前正在执行的线程,并给另一个在队列中等待优先级相同的线程提供机会。 如果没有线程,则当前线程将继续执行。 CPU永远不会处于理想状态。

Sleep():方法将在特定时间停止线程(时间将以毫秒为单位)。 如果这是正在运行的单线程,则CPU在该时间段内将处于理想状态。

两者都是静态方法。

Sumit Singh answered 2020-01-14T19:25:43Z

1 votes

产量:这是对调度程序的暗示(不保证),您已做足够的事情,并且某些其他优先级相同的线程可能会运行并使用CPU。

Thread.sleep();

睡眠:它在给定时间内阻止该特定线程的执行。

TimeUnit.MILLISECONDS.sleep(1000);

Prashant_M answered 2020-01-14T19:26:08Z

0 votes

yield():yield方法用于暂停当前正在运行的进程的执行,以便其他具有相同优先级的等待线程将让CPU执行。优先级较低的线程将不会在yield上执行。 如果没有等待线程,则该线程将开始执行。

join():join方法停止当前正在执行的线程,并等待另一个线程完成,然后在该线程中调用join方法,它将继续自己的执行。

有关详细说明,请参见此链接。

Pankaj Goyal answered 2020-01-14T19:26:37Z

0 votes

请求当前线程放弃CPU以便其他线程可以执行的一种方法是在Java中使用yield。

yield是静态方法。它没有说哪个其他线程将获取CPU。同一线程有可能取回CPU并重新开始执行。

public class Solution9 {

public static void main(String[] args) {

yclass yy = new yclass ();

Thread t1= new Thread(yy);

t1.start();

for (int i = 0; i <3; i++) {

Thread.yield();

System.out.println("during yield control => " + Thread.currentThread().getName());

}

}

}

class yclass implements Runnable{

@Override

public void run() {

for (int i = 0; i < 3; i++) {

System.out.println("control => " + Thread.currentThread().getName());

}

}

}

Soudipta Dutta answered 2020-01-14T19:27:02Z

0 votes

sleep()使线程在给定的时间内肯定停止执行; 如果不需要运行其他线程或进程,则CPU将处于空闲状态(并可能进入节能模式)。yield()基本上意味着线程没有做任何特别重要的事情,如果需要运行任何其他线程或进程,则应该这样做。 否则,当前线程将继续运行。

Sai Sunder answered 2020-01-14T19:27:23Z

你可能感兴趣的:(java线程sleep,yield)