sum*_*umy 2 java spring spring-mvc
当用户发送请求时,来自请求的信息将被发送到远程网站。然后,我想调用一个 API 来检查请求是否成功发送。如果我立即调用它,它不会返回任何内容,因此应在几秒钟后调用 API。
有没有什么方法可以让Controller休眠一段时间,或者一段时间后做一个任务并自动执行?
要休眠 10 秒,您可以使用Thread.sleep():
Thread.sleep(10000);
Run Code Online (Sandbox Code Playgroud)
但是要小心这种方法,它会阻塞您的线程,并且在超时到期之前不会让它处理其他用户请求。如果您有许多并行运行的此类请求,则可能会导致线程池耗尽(并最终导致请求超时)。
要在 10 秒后执行某些任务,您可以使用Timer.schedule():
new Timer().schedule(
new TimerTask() {
@Override
public void run() {
// Your code here
}
},
10000
);
Run Code Online (Sandbox Code Playgroud)
此调用将立即返回并稍后在单独的线程中执行检查。这种方法更加安全和可扩展。
如果您需要对延迟任务进行更多控制,也可以使用ScheduledExecutorService. 它将允许您定义将执行任务的线程池的大小、取消挂起的任务、从它们获取结果等:
// Create a pool of threads to execute checks
private final ScheduledExecutorService scheduler =
Executors.newScheduledThreadPool(poolSize);
// In the request handler:
ScheduledFuture<?> future = scheduler.schedule(() -> {
// Your code here
}, 10, TimeUnit.SECONDS);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8329 次 |
| 最近记录: |