Runnable class 没有被执行
Runnable class is not exectued
我实现了一个虚拟计数器,只是在 0-100 之间上下计数。
很简单,工厂提供了一个实现Runnable的VirtualCounter。
@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();
所以我知道如何制作这个 运行ning 但是我真的很想了解为什么第一次尝试成功而第二次失败。
第二个的 运行 方法从未被调用。调试器忍不住理解。对这种行为有什么好的解释吗?
谢谢
因为表达式 VirtualTimer.CounterFactory::getNewCounter
是 Supplier<? extends Runnable>
类型,而不是 Runnable
.
我实现了一个虚拟计数器,只是在 0-100 之间上下计数。
很简单,工厂提供了一个实现Runnable的VirtualCounter。
@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();
所以我知道如何制作这个 运行ning 但是我真的很想了解为什么第一次尝试成功而第二次失败。
第二个的 运行 方法从未被调用。调试器忍不住理解。对这种行为有什么好的解释吗?
谢谢
因为表达式 VirtualTimer.CounterFactory::getNewCounter
是 Supplier<? extends Runnable>
类型,而不是 Runnable
.