Netty 的 `sync` 与 `syncUninterruptibly`
Posted
技术标签:
【中文标题】Netty 的 `sync` 与 `syncUninterruptibly`【英文标题】:Netty's `sync` vs `syncUninterruptibly` 【发布时间】:2015-11-02 15:43:57 【问题描述】:我试图从 Netty 的文档中找出答案,并在 Google 上搜索了一下,但我找不到任何关于 ChannelFuture
的 sync()
和 syncUninterruptibly()
方法之间的区别(除了 @ 987654324@ 明确抛出 InterruptedException
而 syncUninterruptibly
没有)。任何人都可以对这个主题有所了解吗?
我会说使用syncUninterruptibly
会更“愉快”(至少对我而言),因为它没有声明任何已检查的异常。如果这是唯一的区别,那为什么两种方法都在那里?
【问题讨论】:
【参考方案1】:您可以查看await()
和awaitUninterruptibly()
以了解差异。
第一种,如果执行future相关操作的线程发生中断,由于当前执行sync
(或await
)的线程不同,会在调用者中抛出异常,如你知道的。
if (Thread.interrupted())
throw new InterruptedException(toString());
在第二种情况下,如果在执行future相关操作的线程中发生了中断,它只会在调用者线程上重做一个中断,这意味着你对中断进行不同的管理。
if (interrupted)
Thread.currentThread().interrupt();
因此,您可以将第一个视为加速器,以确保您测试中断。但有时您可能更愿意将此中断处理再次推迟到另一个调用者,您可能更喜欢第二个。
所以用法与你想如何处理线程中断有关。
【讨论】:
以上是关于Netty 的 `sync` 与 `syncUninterruptibly`的主要内容,如果未能解决你的问题,请参考以下文章