为了账号安全,请及时绑定邮箱和手机立即绑定

未执行可运行类

未执行可运行类

智慧大石 2021-05-31 18:54:32
我实现了一个虚拟计数器,只是在 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

查看完整回答
反对 回复 2021-06-02
  • 1 回答
  • 0 关注
  • 122 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信