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

从Java中的同步上下文调用Thread.sleep()

贝礼骞
2023-03-14
问题内容

我已经读过,Thread.sleep()它将在指定的时间后暂停当前正在运行的线程,在此之后它返回可运行状态,以等待其运行。

另外,如果从synchronized上下文调用,sleep()则不会释放其持有的锁。所以我想知道何时将释放锁定。如果线程进入睡眠状态,则永远无法获得运行的机会,因此它将始终保持锁定,然后保持其他线程如何进入同步的方法/块。

我不确定是否要问有效的问题。但是请帮帮我。


问题答案:

所以我想知道何时将释放锁定。

它将在退出synchronized块时(而不是更早)释放锁。

如果线程进入睡眠状态,则永远无法获得运行的机会,因此它将始终保持锁定,然后锁定其他线程如何进入同步方法/块。

很简单,其他线程将无法输入与睡眠线程 在同一对象 上同步的代码。

总而言之,Thread.sleep()synchronized块进行调用可能不是一个好主意。



 类似资料:
  • 我正在尝试创建一个回调函数: 首先,我创建了一个函数接口,用于定义回调函数的约定 我创建了一个类,该类将定义一个方法来调用我的回调(我通过使用lambda表达式传递了接口的实现作为对此方法的引用) 下面是我的代码: 但当我运行这段代码时,我得到了这样的结果。 有人能告诉我为什么我会有这个例外吗?

  • 问题内容: Eclipse调试环境中是否有任何机制可以查看持有的同步锁的状态和正在等待的进程? 问题答案: 您可以在Eclipse的调试器中显示对象监视器的状态。您可以在此处找到简短明了的教程。对于每个线程,Eclipse可以向您显示该线程拥有的监视器以及正在等待的监视器。

  • 我正试图从同步方法运行异步方法。但是我不能等待异步方法,因为我在同步方法中。我一定不理解TPL,因为这是我第一次使用它。 每个方法都需要前一个方法来完成,因为第一个方法的数据用于第二个方法。 Await运算符只能在异步方法中使用。考虑用'async'修饰符标记此方法,并将其返回类型更改为'task' 但是,如果我使用async修饰符,这将是一个异步操作。因此,如果我对的调用没有使用await运算符

  • 我是web服务开发的初学者。我们正在使用Spring3用java构建RESTWeb应用程序。 我们正在使用的Web服务具有异步登录方法。我们为他们提供了一个回调监听器URL,他们的服务在其中发回响应。 因此,当我们发送登录请求时,我们会收到一个空白响应作为确认。和服务发送一个响应,其中包含侦听器URL上的实际数据。 请帮助,我应该如何设计/实现调用登录服务作为同步调用?谢谢 编辑:下面是回发消息的

  • 为什么下面的代码不能保证多个线程之间total_home数字的唯一性,即使逻辑处于同步块中。 } } } 这是一个程序示例。试着运行5-10次,你会发现total_home的值并不是每次都是唯一的。

  • 所以问题是在这种情况下notificationPhoneNumber对象锁定了多长时间?它是否会在线程完成其工作时被锁定?