someter método no invocará onNext flujo de la corriente API de JAVA

Tomás Denis Reyes Sánchez :

Estoy aprendiendo sobre la API de flujo de la corriente en Java y actualmente estoy creando un ejemplo basado en el que se encuentra en la comunidad de Oracle . El problema es que no consigo ver el resultado esperado, pero sólo la cadena suscriptor que se imprime dentro de onSubscribemétodo. Ya inspeccionado y declarado submissionpublisher-en-presentar-no-invocar-onnext de abonado en StackOverflow, pero no funcionó porque yo ya estaba llamando request(Long N).

import java.util.concurrent.Flow;

public class Computer<T> implements Flow.Subscriber<T> {

    private Flow.Subscription subscription;

    @Override
    public void onSubscribe(Flow.Subscription subscription) {
        this.subscription = subscription;
        System.out.println("SUBSCRIBING");
        this.subscription.request(1);
    }

    @Override
    public void onNext(T item) {
        System.out.println(String.format("Got %s", item.toString()));
        this.subscription.request(1);
    }

    @Override
    public void onError(Throwable throwable) {
        throwable.printStackTrace();
    }

    @Override
    public void onComplete() {
        System.out.println("DONE");
    }

}

-

import java.util.List;
import java.util.concurrent.SubmissionPublisher;

public class Sensor {

    public static void main(String[] args) {
        SubmissionPublisher<String> submissionPublisher = new SubmissionPublisher<>();
        Computer<String> subscriber = new Computer<>();
        submissionPublisher.subscribe(subscriber);

        List<String> items = List.of("1.25", "1.224", "1.55");
        items.forEach(submissionPublisher::submit);
        submissionPublisher.close();
    }

}

Y acabo de llegar a ver:

SUBSCRIBING

¿Por qué onNextno está siendo llamado método?

Tomás Denis Reyes Sánchez :

No está de paso una ScheduledExecutorServicea la Publisherque es básicamente un ExecutorService que se puede programar tareas que se ejecutan después de un retraso o para ejecutar repetidas veces con un intervalo fijo de tiempo entre cada ejecución.

import java.util.List;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.SubmissionPublisher;

public class Sensor {

    public static void main(String[] args) {
        ScheduledExecutorService executor = Executors.newScheduledThreadPool(Runtime.getRuntime().availableProcessors());
        SubmissionPublisher<String> submissionPublisher = new SubmissionPublisher<>(executor, 5);
        Computer<String> subscriber = new Computer<>();
        submissionPublisher.subscribe(subscriber);

        List<String> items = List.of("1.25", "1.224", "1.55");
        items.forEach(submissionPublisher::submit);
        submissionPublisher.close();
        executor.shutdown();
    }
}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=332777&siteId=1
Recomendado
Clasificación