Класс 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
,