我实现了一个虚拟计数器,只是在 0-100 之间向上和向下计数。这很简单,工厂提供了一个实现 Runnable 的 VirtualCounter。@Getter@Setterpublic 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();所以我知道如何运行它,但是我真的很想了解为什么第一次尝试有效而第二次无效。第二个的 run 方法从未被调用。调试器不由得明白了。对这种行为有什么好的解释吗?
1 回答
哔哔one
TA贡献1854条经验 获得超8个赞
因为表达式VirtualTimer.CounterFactory::getNewCounter
的类型是Supplier<? extends Runnable>
,而不是Runnable
。
添加回答
举报
0/150
提交
取消