同步提交发布者

亚历克斯

是否可以使订阅服务器与发布服务器在同一线程上运行(同步)?我可以使用CompletableFuture,但它只提供一个结果。但是,如果我需要将许多结果传递给订阅者,该怎么办?请查看此小测试以获得更好的解释。

  @Test
  public void testCompletableFutureThreads() throws InterruptedException {
    CompletableFuture<String> f = new CompletableFuture<String>();
    f.thenAccept(new Consumer<String>() {
      @Override
      public void accept(String s) {
        System.out.println("accept " + s + " in " + Thread.currentThread().getName());
      }
    });
    Thread.sleep(200);
    System.out.println("send complete from " + Thread.currentThread().getName());
    f.complete("test");
    Thread.sleep(1000);
  }



  @Test
  public void testSubmissionPublisherThreads() throws InterruptedException {

    SubmissionPublisher<String> publisher = new SubmissionPublisher<String>();

    publisher.subscribe(new Flow.Subscriber<String>() {
      @Override
      public void onSubscribe(Flow.Subscription subscription) {
        subscription.request(Long.MAX_VALUE);
      }

      @Override
      public void onNext(String item) {
        System.out.println("onNext in " + Thread.currentThread().getName() + " received " + item);
      }

      @Override
      public void onError(Throwable throwable) {
        System.err.println("onError in " + Thread.currentThread().getName());
        throwable.printStackTrace(System.err);
      }

      @Override
      public void onComplete() {
        System.err.println("onComplete in " + Thread.currentThread().getName());
      }
    });

    int i = 10;
    while (i-- > 0) {
      Thread.sleep(100);
      System.out.println("publisher from " + Thread.currentThread().getName());
      publisher.submit("" + System.currentTimeMillis());

    }
  }
皮特·卡尔瓦斯(Piotr P.Karwasz)

您可以使用SubmissionPublisher(Executor, int)构造函数,并提供一个Executor在当前线程上运行所有内容的:

final SubmissionPublisher<String> publisher = new SubmissionPublisher<>(new Executor() {
    @Override
    public void execute(Runnable command) {
        command.run();
    }
}, Flow.defaultBufferSize());

或者,如果您更喜欢lambdas:

final SubmissionPublisher<String> publisher = new SubmissionPublisher<>(Runnable::run, Flow.defaultBufferSize());

默认构造函数用于ForkJoinPool.commonPool()发送信号。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Silverstripe静态发布者破坏表单提交

来自分类Dev

发布者订阅者模式的现代替代方案

来自分类Dev

如何使用Spring配置异步和同步事件发布者

来自分类Dev

从OpenDDS发布者传递复杂结构

来自分类Dev

Google开发者帐户(发布者)

来自分类Dev

具有BitBucket Cloud提交状态发布者的TeamCity。404错误

来自分类Dev

同步提交发布者

来自分类Dev

发布者数据库与mosquitto代理数据库mqtt之间的同步

来自分类Dev

从ObservableObject发布者更新状态

来自分类Dev

合并:如何取消flatMap的发布者

来自分类Dev

Redis发布/订阅-发布者也是订阅者?

来自分类Dev

订阅者无法读取发布者的图片

来自分类Dev

将主题/发布者转换为另一个发布者

来自分类Dev

Windows Installer未知发布者

来自分类Dev

如何使连续发布价值的合并发布者?

来自分类Dev

使用BitBucket两因素身份验证的TeamCity提交状态发布者

来自分类Dev

带NotificationCenter发布者的SwiftUI

来自分类Dev

在其他发布者的地图中使用发布者的结果

来自分类Dev

使用$ .deferred作为发布者/订阅者?

来自分类Dev

发布者API调用失败

来自分类Dev

ros python发布者/订阅者

来自分类Dev

Google开发者帐户(发布者)

来自分类Dev

ReactJS中的发布者/订阅者模型

来自分类Dev

发布/订阅中的发布者应该是同步的还是异步的?

来自分类Dev

TeamCity / BitBucket-提交状态发布者

来自分类Dev

我如何默认将发布者证书安装到“受信任的发布者”中?

来自分类Dev

opentok:发布者和订阅者视频显示相同

来自分类Dev

作为发布者的 Azure SQL

来自分类Dev

nanomsg (nng) 中的多个发布者和订阅者

Related 相关文章

热门标签

归档