Browser docs

Callback

Intent

Callback is a piece of executable code that is passed as an argument to other code, which is expected to call back (execute) the argument at some convenient time.

Explanation

Real world example

We need to be notified after executing task has finished. We pass a callback method for the executor and wait for it to call back on us.

In plain words

Callback is a method passed to the executor which will be called at defined moment.

Wikipedia says

In computer programming, a callback, also known as a “call-after” function, is any executable code that is passed as an argument to other code; that other code is expected to call back (execute) the argument at a given time.

Programmatic Example

Callback is a simple interface with single method.

1public interface Callback {
2
3  void call();
4}

Next we define a task that will execute the callback after the task execution has finished.

 1public abstract class Task {
 2
 3  final void executeWith(Callback callback) {
 4    execute();
 5    Optional.ofNullable(callback).ifPresent(Callback::call);
 6  }
 7
 8  public abstract void execute();
 9}
10
11@Slf4j
12public final class SimpleTask extends Task {
13
14  @Override
15  public void execute() {
16    LOGGER.info("Perform some important activity and after call the callback method.");
17  }
18}

Finally, here’s how we execute a task and receive a callback when it’s finished.

1    var task = new SimpleTask();
2    task.executeWith(() -> LOGGER.info("I'm done now."));

Class diagram

alt text

Applicability

Use the Callback pattern when

  • when some arbitrary synchronous or asynchronous action must be performed after execution of some defined activity.

Real world examples

  • CyclicBarrier constructor can accept a callback that will be triggered every time a barrier is tripped.