在以下情况下是否建议使用 Thread.sleep()



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

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。

  • 但令人担忧的是,由于它是从 Web 服务调用的,因此这些线程可能来自某种池,如果出现大量请求,可能会耗尽?
  • 或者新的 servlet 容器在耗尽时会自动创建额外的线程,我们可以编写这种代码而不必担心这些事情?
  • 调度在 20 秒后运行的异步任务是更好的选择吗?在这里,我们还必须有一个线程池来执行这些任务。
调度在

20 秒后运行的异步任务是否 更好的选择?在这里,我们还必须有一个线程池来执行 无论如何,这些任务。

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

调度在 20 秒后运行的异步任务是更好的选择吗?在这里,我们还必须有一个线程池来执行这些任务。

如果您的最终用户/应用程序不需要 Web 服务调用的任何结果,那么最好不要保留线程。你应该走同步的方式。

或者新的 servlet 容器在耗尽时会自动创建额外的线程,我们可以编写这种代码而不用担心这些事情?

若要自定义此线程池的大小,应在application.propertiesapplication.xml文件中为server.tomcat.max-threads属性指定一个非零值。

最新更新