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

Aja*_*kur 51 java multithreading

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

Ana*_*nan 126

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

  1. yield()
  2. join()
  3. sleep()
  1. yield()方法暂时暂停当前正在执行的线程,以便为执行相同优先级的剩余等待线程提供机会.如果没有等待线程或所有等待线程的优先级较低,则同一线程将继续执行.当它将获得执行机会时产生的线程由其行为依赖于供应商的线程调度程序决定.

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

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

  • 还等待一些同步对象,如互斥锁. (2认同)

Mic*_*rdt 92

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

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

  • @legend:你读到的措辞非常具有误导性,以至于我认为它是错误的。sleep() 与锁定无关,但是*因为*如果一个线程锁定了某个对象,它将在睡眠时保持这些锁定(这通常非常糟糕)。sleep() 的目的是在固定的时间内什么都不做。 (3认同)
  • @legend:wait() 的目的并不是真正等待特定的*时间*,而是要满足某些条件,然后通过调用 notify() 获得通知。并且在等待该条件时,线程释放以锁定*调用 wait() 的特定对象*,以便其他线程可以努力满足条件。但在这里,如果线程持有其他锁,它们不会被释放——这就是死锁可能发生的原因。 (2认同)

Kaz*_*ara 29

Sleep()导致当前正在执行的线程进入休眠状态(暂时停止执行).

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

在此输入图像描述

阅读本文以获得对该主题的详细解释.

  • 这个流程有错误:从睡眠状态到准备运行,我们使用interrupt()而不是notify()和notifyAll() (15认同)
  • 这个答案有这么多人点赞。但请注意@NguyenDat 的评论 (2认同)

gio*_*shc 5

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


小智 5

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

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

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