睡眠方法和多线程的产量方法有什么区别?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了睡眠方法和多线程的产量方法有什么区别?相关的知识,希望对你有一定的参考价值。

当遇到调用[sleep][1]();时当前正在执行线程,然后线程立即进入休眠状态,其中[yield][2]();线程进入可运行状态/就绪状态

答案

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

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

另一答案

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

另一答案

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

  1. yield()
  2. join()
  3. sleep()
  1. yield()方法暂时暂停当前正在执行的线程,以便为执行相同优先级的其余等待线程提供机会。如果没有等待线程或所有等待线程的优先级较低,则同一线程将继续执行。当它将获得执行机会时产生的线程由其行为依赖于供应商的线程调度程序决定。
  2. join()如果任何执行线程t1在t2上调用join(),即; t2.join()立即t1将进入等待状态,直到t2完成执行。
  3. sleep()根据我们的要求,我们可以使一个线程处于睡眠状态达指定的时间段(希望我们最喜欢的方法不需要太多解释)。
另一答案

Sleep()导致当前正在执行的线程休眠(暂时停止执行)。

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

阅读this以获得对该主题的详细解释。

另一答案

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

睡眠:将使线程在休眠模式下休眠一段时间内提到的参数。

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

另一答案

Sleep导致线程暂停自身x毫秒,而yield暂停线程并立即将其移动到就绪队列(CPU用来运行线程的队列)。

另一答案

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

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

两者都是静态方法。

另一答案

Yield:调度程序的一个提示(不保证)已经完成了,并且某些其他相同优先级的线程可能会运行并使用CPU。

Thread.sleep();

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

TimeUnit.MILLISECONDS.sleep(1000);
另一答案

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

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

有关详细说明,请参阅this link

另一答案

请求当前线程放弃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());
        }
    }
}

以上是关于睡眠方法和多线程的产量方法有什么区别?的主要内容,如果未能解决你的问题,请参考以下文章

多道程序设计和多线程有什么区别?

异步编程和多线程有啥区别?

什么是多线程,多进程?

多个请求是多线程吗

多方法和多调度之间有啥区别吗?

C#(094):异步和多线程的区别