java - 在以下情况下建议使用 Thread.sleep()

标签 java asynchronous threadpool thread-sleep servlet-container

我有一个调用此方法的网络服务

public void process(Incoming incoming) {
   // code to persist data
   ...
   Thread.sleep(20000);
   // check persisted data and if status != CANCELLED then process
}

要求是我必须等待20秒(因为业务很有可能在20秒内发送取消请求,这种情况我们不应该处理)。

我知道 Thread.sleep() 在时间到之前甚至不会打扰 cpu。

  • 但问题是,由于它是从网络服务调用的,这些线程可能来自某种池,如果有大量请求,它们可能会耗尽?
  • 或者新的 servlet 容器是否会在耗尽时自动创建额外的线程,我们可以编写这种代码而不必担心这些事情?
  • 安排一个在 20 秒后运行的异步任务是否是更好的选择?同样,我们必须有一个线程池来执行这些任务。

最佳答案

Does scheduling an asynchronous task which runs after 20 seconds a better option? Here also, we have to have a Thread pool to execute these tasks anyway.

是的,它是一个更好的选择,因为使用 Thread.sleep(20000); 您会为每个请求阻塞一个线程。使用计划线程池,您将任务添加到某种队列,稍后它们将使用恒定数量的线程执行 - 因此不可能耗尽所有可用线程。

关于java - 在以下情况下建议使用 Thread.sleep(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45275568/

相关文章:

node.js - 如何在 Node.js 中仅在所有网页抓取请求完成后才渲染页面?

带有迭代器的 java.util.ConcurrentModificationException

java: 调用一个方法

java - 在不丢失多行功能的情况下为 EditText 设置输入类型?

android - RXJava - 线程优先级

windows - Goroutines 8kb 和 windows 操作系统线程 1 mb

java - 为什么下面的执行器服务java Thread程序没有关闭?

java - Graphics2D 在 map 上画一条线

python - Python Twisted 中的异步编程

javascript - 我如何知道 IDBCursor 达到了它的最后一个值?