Signals can be used to deliver external data/messages to running workflows. One common use case is when a workflow needs to wait for an external event (for example a human decision) in order to proceed execution. Another use case is when you want to start a workflow execution upon arrival of an external signal/message/event.
Check out this sample in our samples-java repo.