在 Java 中,回调应该发生在哪个线程上?

What thread should callbacks occur on in Java?

提问人:leros 提问时间:9/26/2023 更新时间:9/26/2023 访问量:43

问:

我正在开发一个 Java 库,该库在 ScheduledExecutorService 中运行计划任务。如果用户指定回调,则在该任务之后,将调用这些回调。

现在我只有调度程序线程调用回调。这些回调是否应该在它们自己的线程池中自己的 ExecutorService 中执行?

Java 回调

评论

5赞 MadProgrammer 9/26/2023
这并不重要,只要它被记录下来 - 然后接收者就会负责根据他们的需求和上下文来管理它
0赞 leros 9/27/2023
这是有道理的。我现在决定使用一个单独的 ExcutorService 来处理回调。

答:

1赞 Nolequen 9/26/2023 #1

在我看来,最好的方法是向客户端提供两个选项:为回调指定一个执行器,没有它,类似于在 CompletableStage 中完成的方式:

public CompletionStage<Void> thenAcceptAsync(Consumer<? super T> action); // executes action on internal default executor

public CompletionStage<Void> thenAcceptAsync(Consumer<? super T> action, Executor executor); // executes action on provided executor

这样,客户可以选择哪种方法更适合他们的用例。

评论

0赞 leros 9/27/2023
这对于完全的灵活性是有道理的。现在,我将有一个单独的 ExecutorService 来执行回调。