Может ли вложенный, внутренний класс или интерфейс быть раннер-классом?

Можете пояснить. Может ли вложенный, внутренний класс или интерфейс быть раннер-классом. На практике вроде только во внешнем классе можно реализовать раннер?


Ответы (1 шт):

Автор решения: Podushkoved

В качестве примера можно привести интерфейс Runnable.

Создаем статический метод:

public static void test(Runnable runnable) {
    System.out.println("Start");
    runnable.run();
    System.out.println("End");
}

Затем вызываем его из метода main:

public static void main(String[] args) {
    test(() -> {
        System.out.println("Do something");
    });
}

Вывод:

Start
Do something
End

Такой код будет выполнен в текущем потоке. Для многопоточного режима см. класс Thread.

Создаем класс, имплементирующий интерфейс Runnable:

public class Runner implements Runnable {
    @Override
    public void run() {
        System.out.println("Do something");
    }
}

Затем создаем и запускаем отдельный поток:

public static void main(String[] args) {
    Thread thread = new Thread(new Runner());
    thread.start();
}

То же самое можно проще:

public static void main(String[] args) {
    new Thread(() -> {
        System.out.println("Do something");
    }).start();
}

Вывод:

Do something
→ Ссылка