(4)
https://docs.oracle.com/javase/tutorial/uiswing/events/intro.html
Так и звучит. События разбиты по типам. К объекту который может гененерировать такие событие указываешь кто будет его слушать. Удобно как раз в многопотоке работать. У класса, который отдельный процесс запускает уже есть события завершения.