在以下情况下建议使用 Thread.sleep()
Is using Thread.sleep() advisable in the below scenario
我有一个调用此方法的 web 服务
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 anyways.
如果您的终端 user/application 不需要网络服务调用的任何结果,那么最好不要占用线程。你应该采用异步方式。
或者新的 servlet 容器是否会在耗尽时自动创建额外的线程,我们可以编写这种代码而不用担心这些事情?
要自定义此线程池的大小,您应该在 application.properties
或 application.xml
文件中为 server.tomcat.max-threads
属性 指定一个非零值。
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);
,每个请求都会阻塞一个线程。使用调度线程池,您将任务添加到某种队列,稍后它们将使用恒定数量的线程执行 - 因此不可能耗尽所有可用线程。
我有一个调用此方法的 web 服务
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 anyways.
如果您的终端 user/application 不需要网络服务调用的任何结果,那么最好不要占用线程。你应该采用异步方式。
或者新的 servlet 容器是否会在耗尽时自动创建额外的线程,我们可以编写这种代码而不用担心这些事情?
要自定义此线程池的大小,您应该在 application.properties
或 application.xml
文件中为 server.tomcat.max-threads
属性 指定一个非零值。
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);
,每个请求都会阻塞一个线程。使用调度线程池,您将任务添加到某种队列,稍后它们将使用恒定数量的线程执行 - 因此不可能耗尽所有可用线程。