猿问

未执行可运行类

我实现了一个虚拟计数器,只是在 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();

所以我知道如何运行它,但是我真的很想了解为什么第一次尝试有效而第二次无效。


第二个的 run 方法从未被调用。调试器不由得明白了。对这种行为有什么好的解释吗?


智慧大石
浏览 123回答 1
1回答

哔哔one

因为表达式VirtualTimer.CounterFactory::getNewCounter的类型是Supplier<? extends Runnable>,而不是Runnable。
随时随地看视频慕课网APP

相关分类

Java
我要回答