当前位置: 首页 > 面试题库 >

Java线程wait()=>是否被阻止?

夔修伟
2023-03-14
问题内容

根据Java线程状态信息,调用wait()将导致线程进入BLOCKED状态。但是,这段代码将导致(在调用之后)处于等待状态的线程。

class bThread extends Thread {
    public synchronized void run() {
        try {
            wait();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

}

我有什么问题吗?有人可以向我解释这种行为吗?任何帮助,将不胜感激!


问题答案:

线程在等待通知。然后,它变为BLOCKED,试图重新进入同步区域,直到所有其他线程都离开。

您发布的链接中的有关部分(关于WAITING):

例如,在某个对象上调用Object.wait()的线程正在等待另一个线程在该对象上调用Object.notify()或Object.notifyAll()。

和(大约已阻止):

处于阻塞状态的线程正在等待监视器锁定,以在调用Object.wait之后重新输入同步的块/方法。

当线程尝试从wait()返回时发生最后一部分,但直到那时才返回。



 类似资料:
  • 问题内容: 假设我使用下面的方法每隔几秒钟生成一个线程,并且每个线程大约需要一秒钟才能完成。完成的线程会被删除吗? 问题答案: 线程完成后立即释放本机OS级线程(完成时大约释放),但是线程对象像其他任何对象一样存活,直到无法访问并且垃圾回收器感觉像在运行。 编辑: 知道(在 Sun的 Oracle实施中,任何人)都有一个私有方法,当线程退出时,VM会调用该私有方法,该方法会积极地使多个字段为空,包

  • 问题内容: 我需要使线程顺序。他们需要按以下顺序启动: 当D完成时,C可以完成,然后B,然后是A。 在这种情况下,最好使用线程或?为什么呢? 我的线程需要启动并打印消息,完成后需要打印。 问题答案: 由于您正在等待“其他”线程完成(即完成执行),因此是更好的选择。 的javadoc 简单地说: 等待该线程死亡。 然后,该机制相对简单: 要说明:您需要参考。因此,指向,指向,指向和不指向任何对象(它

  • 那么,我是否理解正确:await task.delay()不阻塞调用线程,而是阻塞等待的任务转移到的某个线程? 如果这句话是真的,那么你能给我一个方法,让任务等待一段时间而不阻塞任何线程在等待期间吗?

  • 问题内容: 基本上,我看到了一个BLOCKED线程,但它具有等待的锁: 我希望能看到而不是。另一个问题表明垃圾回收是原因,但是如果是这种情况,不是所有线程都被阻塞了吗?还有其他线程是可运行的。另外,我怎么能证明是这种情况?为什么这是观察到的行为?我不想盲目假设它是垃圾收集器,只是几天后才发现它是其他东西。 ==辅助信息== 尽管我认为这与手头的问题无关,但这是上述转储来自的代码部分。 显然,在那条

  • 我们有一个由2个节点a和B组成的集群。 如果我们在节点a上阻止线程的执行(我是通过远程连接到我的VM并放置断点来执行的),那么节点B认为节点a被分段(这是预期的行为)。 在执行上述场景后,节点A上的任何缓存查找都会被卡住,我们永远不会从IGniteCache中获得结果。 我已经编写了一个测试应用程序来重现这个问题。复制这个问题并不困难,但我已经尽力在readme.md中提供了指导 如果你仍然不清楚

  • 我的问题:三个线程的ID分别是A,B,C;,每个线程将自己的ID值在屏幕上打印5遍,打印顺序是ABCABC。 我编写的代码: 但是出现了错误 哪个地方出现了问题呢?