【问题标题】:Netty's `sync` vs `syncUninterruptibly`Netty 的 `sync` 与 `syncUninterruptibly`
【发布时间】:2015-11-02 15:43:57
【问题描述】:

我试图从 Netty 的文档中找出答案,并在 Google 上搜索了一下,但我找不到任何关于 ChannelFuturesync()syncUninterruptibly() 方法之间的区别(除了 @ 987654324@ 明确抛出 InterruptedExceptionsyncUninterruptibly 没有)。任何人都可以对这个主题有所了解吗?

我会说使用syncUninterruptibly 会更“愉快”(至少对我而言),因为它没有声明任何已检查的异常。如果这是唯一的区别,那为什么两种方法都在那里?

【问题讨论】:

    标签: netty channel


    【解决方案1】:

    您可以查看await()awaitUninterruptibly() 以了解差异。

    1. 第一种,如果执行future相关操作的线程发生中断,由于当前执行sync(或await)的线程不同,会在调用者中抛出异常,如你知道的。

      if (Thread.interrupted()) {
          throw new InterruptedException(toString());
      }
      
    2. 在第二种情况下,如果在执行future相关操作的线程中发生了中断,它只会在调用者线程上重做一个中断,这意味着你对中断进行不同的管理。

      if (interrupted) {
          Thread.currentThread().interrupt();
      }
      

    因此,您可以将第一个视为加速器,以确保您测试中断。但有时您可能更愿意将此中断处理再次推迟到另一个调用者,您可能更喜欢第二个。

    所以用法与你想如何处理线程中断有关。

    【讨论】:

      猜你喜欢
      • 2015-01-21
      • 2019-07-10
      • 2017-05-21
      • 2020-03-16
      • 1970-01-01
      • 2017-11-26
      • 2020-05-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多