gpt4 book ai didi

java - @Async 与 outstream 和 thread.sleep 方法

转载 作者:行者123 更新时间:2023-12-01 13:15:52 26 4
gpt4 key购买 nike

关于@Async注解的一个简单问题。

例如:一个方法被 @Async 注解,并且它包含 thread.sleep 几秒钟。 sleep 后,它们是 outStream.println。那么结果是什么呢。

我使用ThreadPoolTask​​Executor作为执行器

我只是想知道,因为我在上面尝试过 sleep 5 秒,但在几分之一秒内就得到了 outStream.println 。所以我只想了解这是否是异步注释的工作原理,即它是否给出了即时响应并且 thread.sleep 由其他线程执行。

最佳答案

假设你的方法是这样的

@Async
public void foo() {
sleep(5000L);
System.out.println("hello world");
}

这不会告诉您任何信息,因为 5 秒的等待无论如何都是在另一个线程中进行的。但是如果你有这样的东西

public void bar() {
myService.foo();
System.out.println("hello world");
}

然后,如果您在“不到一秒”内得到 Hello World,则意味着 foo 的调用确实是异步完成的。

当您使用 @Async 调用方法时方法调用包含在 Callable 中并且该实例使用 submit 传递给执行程序服务方法。

如果执行器无法处理方法执行,您将得到 TaskRejectedException 。例如,如果您的 ThreadPoolTaskExecutor池大小为 2 个线程,队列大小为 0,foo 的第三次调用方法将失败并显示 TaskRejectedException如果池线程仍然忙于处理前两个调用。

关于java - @Async 与 outstream 和 thread.sleep 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22479979/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com