首页 > 解决方案 > 新的 Runnable 和 Runnable 类型的功能接口有什么区别?

问题描述

当我为 a 创建一个Observable带有 lambdaRunnable的代码时,代码将按计划执行该run方法。但是,如果我创建一个新的 Runnable 代码不会执行该计划,什么都不会发生?

获取和使用的代码Runnable

Observable<Usage> usageObservable = Observable.create(emitter -> {
  ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1);

  executorService.scheduleAtFixedRate(createNewUsageListener(emitter), 0, 2, TimeUnit.SECONDS);

});

ConnectableObservable<Usage> connectableObservable = usageObservable.share().publish();

connectableObservable.connect();

在计划中工作和执行的代码ScheduledExecutorService

private Runnable createNewUsageListener(ObservableEmitter<Usage> emitter) {
  return () -> {
    List<Usage> usages = getUpdates(rollDice(0, 5));
    if (usages != null) {
      emitUsageStats(emitter, usages);
    }
  };
}

这段代码对我来说似乎是相同的代码,但它不会在ScheduledExecutorService

private Runnable createNewUsageListener(ObservableEmitter<Usage> emitter) {
  return new Runnable() {
    @Override
    public void run() {
      List<Usage> usages = getUpdates(rollDice(0, 5));
      if (usages != null) {
        emitUsageStats(emitter, usages);
      }
    }
  };
}

标签: javamultithreadingrunnablefunctional-interface

解决方案


推荐阅读