Класс Runnable не существует

Я реализовал виртуальный счетчик, просто считая от 0 до 100.

Это очень просто, фабрика поставляет VirtualCounter, который реализует Runnable.

@Getter
@Setter
public class VirtualTimer implements Runnable {

    private int currentValue = ThreadLocalRandom.current().ints(0, 100).findFirst().getAsInt();
    private boolean countingUp;


    private VirtualTimer() {
    }

    @Override
    public void run() {
        while (true) {
            try {
                sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            if (countingUp) {
                if (currentValue == 100) {
                    countingUp = false;
                    currentValue--;
                } else
                    currentValue++;
            } else {
                if (currentValue == 0) {
                    countingUp = true;
                    currentValue++;
                } else
                    currentValue--;
            }
            System.out.println("CurrentValue: " + currentValue);
        }
    }


    public static class CounterFactory {

        public static VirtualTimer getNewCounter() {
            return new VirtualTimer();
        }
    }
}

Что работает, это использование Runnable

  Runnable runnable = VirtualTimer.CounterFactory.getNewCounter();
    Thread test = new Thread(runnable);
    test.start();

Что не работает, так это:

Thread test = new Thread(VirtualTimer.CounterFactory::getNewCounter);
        test.start();

Так что я знаю, как это сделать, но я действительно хочу понять, почему первая попытка работает, а вторая - нет.

Второй метод запуска никогда не вызывается. Отладчик не мог не понять. Есть хорошее объяснение этому поведению?

Спасибо

1 ответ

Решение

Потому что выражение VirtualTimer.CounterFactory::getNewCounter
имеет тип Supplier<? extends Runnable>не Runnable,

Другие вопросы по тегам