В чем разница между новым Runnable и функциональным интерфейсом типа Runnable? - PullRequest
2 голосов
/ 17 апреля 2019

Когда я создаю Observable с лямбдой для Runnable, код будет выполнять метод 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);
      }
    }
  };
}
...