当前位置: 首页 > 知识库问答 >
问题:

一个线程在Java中调用等()后做什么?

陆才俊
2023-03-14

在多线程程序中,我怀疑当一个线程等待()时,它不会占用太多的cpu利用率,以便cpu可以交换以处理其他线程。

例如,100个线程一起启动同一个任务,而50个线程实际执行该任务,而其他50个线程等待所有50个任务完成。后一种情况比前者花费的时间少得多。

共有1个答案

费朗
2023-03-14

等待方法有两个目的:

  1. 它会告诉当前正在执行的线程进入睡眠状态(不使用任何cpu)
  2. 它将释放锁,以便其他线程可以唤醒并获取锁

每当一个方法在同步块内执行某些操作时,块中的任何内容都必须等待锁定的对象被释放。

synchronized (lockObject) {
    // someone called notify() after taking the lock on
    // lockObject or entered wait() so now it's my turn

    while ( whatineedisnotready) {
        wait(); // release the lock so others can enter their check
        // now, if there are others waiting to run, they 
        // will have a chance at doing so.
    }
}

必须阅读:

java已同步

 类似资料:
  • 当我创建一个简单的非多线程JavaFX应用程序并启动它时,该应用程序会创建一些线程(JavaFXApplicationThread、JavaFXLauncher等)。这些线程中的大多数都已命名,但在我的所有JavaFX应用程序中都有一个未命名的线程(“线程-1”或“线程-2”)。我绝对不会创建自己的线程,因为我尝试启动Hello World JavaFX应用程序(由IDEA生成),其中也包含“线程

  • 线程池与任何ExecutorServices一样,我们定义了一个大小为3的newFixedPool。现在我有一个大约10000个可运行任务的队列。对于执行上述过程,我有这些疑问- > 要执行上述过程,执行者是否只允许来自任务queus的3个线程一次运行? 池将携带3个线程,这3个线程将只负责执行所有10000个任务。如果正确,单个线程如何运行不同的可运行任务,因为最终这些任务也是线程本身,并且在任

  • 我目前正在从一个服务运行一个线程来做一些后台工作。现在存在线程崩溃或者我想从服务中断线程的可能性。那我该怎么: 实际停止线程,(硬) 捕获异常并调用有关崩溃的服务 如果在睡眠时中断,则处理InterruptedException() 线程是否为Thread.IsInterrupted是检测线程是否停止的好方法吗? 到目前为止,我所做的工作如下: 所以一开始我运行我的线程直到它被中断。如果出现任何异

  • 问题内容: 在我的程序执行过程中,启动了多个线程。线程数量取决于用户定义的设置,但是它们都使用不同的变量执行相同的方法。 在某些情况下,需要在执行过程中进行清理,其中一部分是停止所有线程,尽管我不希望它们立即停止,我只是设置了一个变量来检查它们是否终止。问题在于线程停止之前最多可能需要1/2秒。但是,我需要确保所有线程都已停止,然后才能继续进行清理。清理是从另一个线程执行的,因此从技术上讲,我需要

  • 我想优雅地关闭一个线程。然而,一旦关闭被启动,线程应该在结束通常的操作后执行一些关闭操作。 两个线程都使用Hibernate和/或等待,并处理中断异常,它们还在一个循环中处理任务,只需要几毫秒。所以我期望while循环结束,因为Thread.currentThread()。isInterrupted()变为“true”。 问题是,对于我的代码,有时我会得到日志“SHUTDOWN”,有时不会。此外,

  • 我正在阅读这篇文章,关于从一个线程中断另一个线程的建议是 “”“如果正确实施,以下几种方法应该可以奏效。 您可以让两个线程定期检查一些常见的标志变量(例如,将其称为stopNow),并安排两个线程在完成时进行设置。(标志变量需要是volatile…或正确同步的。) 您可以让两个线程定期调用线程。isInterrupted()方法,查看它是否已被中断。然后每个线程都需要调用线程。完成后,在另一个上中