Функция, которая содержит реализацию Runnable - PullRequest
9 голосов
/ 26 сентября 2019

У меня есть этот код:

new Thread(() -> {

    //do things

}).start();

new Thread(() -> {

    //do same things

}).start();

Я знаю, что могу объявить функцию, которая содержит лямбду:

Function<Integer, Integer> add = x -> x + 1;

Я хочу, чтобы эта функция содержала реализацию Runnableот new Thread.

Но я не знаю, что поставить между <> из Function.

1 Ответ

5 голосов
/ 26 сентября 2019

java.util.Function не может представлять задачу Runnable, поскольку функция принимает аргумент и что-то возвращает, и наоборот, метод Runnable.run не принимает аргумента и ничего не возвращает.Даже если вы чувствуете, что Runnable в некоторой степени похож на Function<Void, Void>, даже это предположение неверно по той же причине.

Учитывая, что Runnable - это единственный интерфейс абстрактного метода (он имееттолько метод run), вы можете просто реализовать его с помощью лямбда-выражения.Также обратите внимание, что эта лямбда является просто более лаконичным синтаксическим сахаром для ортодоксальных анонимных внутренних классов.Вот как это выглядит.

Runnable task = () -> System.out.println("My task");

Вы можете использовать этот экземпляр Runnable как обычную команду Runnable в своей программе.Вот такой пример использования.

Thread t = new Thread(task);
t.start();
...