Функциональный интерфейс — это интерфейс с единственным абстрактным методом. Он используется как целевой тип для лямбда-выражений и ссылок на методы. Обозначается аннотацией @FunctionalInterface, но это не обязательно — главное, чтобы был один абстрактный метод. Примеры: Runnable, Callable, Comparator, Function.