Java 在下面的场景中是否建议使用Thread.sleep()

Java 在下面的场景中是否建议使用Thread.sleep(),java,asynchronous,threadpool,thread-sleep,servlet-container,Java,Asynchronous,Threadpool,Thread Sleep,Servlet Container,我有一个webservice,它调用这个方法 public void process(Incoming incoming) { // code to persist data ... Thread.sleep(20000); // check persisted data and if status != CANCELLED then process } 要求是我必须等待20秒(因为业务很有可能在20秒内发送取消请求,在这种情况下,我们不应处理) 我知道Thread.s

我有一个webservice,它调用这个方法

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秒后运行的异步任务是更好的选择吗?在这里,我们还必须有一个线程池来执行这些任务

如果最终用户/应用程序不需要webservice调用的任何结果,那么最好不要保留线程。你应该走异步的路

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


如果最终用户/应用程序不需要webservice调用的任何结果,那么最好不要保留线程。您应该采用异步方式。

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


要自定义此线程池的大小,您应该为
应用程序.properties
应用程序.xml
文件中的
server.tomcat.max threads
属性指定一个非零值。

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

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

是否计划一个异步任务,该任务在20秒后运行 更好的选择?在这里,我们还必须有一个线程池来执行 不管怎样,这些任务都很重要

是的,这是一个更好的选择,因为使用
Thread.sleep(20000)每个请求阻塞一个线程。使用调度线程池,您可以将任务添加到某种队列中,然后使用固定数量的线程执行任务,因此不可能耗尽所有可用线程

是否计划一个异步任务,该任务在20秒后运行 更好的选择?在这里,我们还必须有一个线程池来执行 不管怎样,这些任务都很重要


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

hmm。。谢谢@Shinchan最终用户不需要回复。。。这就是我返回的原因。。。你觉得问题1和2怎么样。。谢谢@Shinchan最终用户不需要回复。。。这就是我返回的原因。。。你觉得问题1和问题2怎么样