我對通道管道的上游/下游處理程序的併發性有疑問。我一直認爲,如果在構建管道時(即,管道不在管道之間共享)創建新的處理程序,則最多一個線程與處理程序進行交互。關於Netty和併發處理程序
現在,我正在瀏覽示例。更具體的,藉此之一:http://docs.jboss.org/netty/3.2/xref/org/jboss/netty/example/discard/DiscardServerHandler.html
在代碼中,有一個成員變量(它被用於計算的總字節數):爲什麼他們在這裏使用的AtomicLong
private final AtomicLong transferredBytes = new AtomicLong();
?處理程序的構造如下(參見http://docs.jboss.org/netty/3.2/xref/org/jboss/netty/example/discard/DiscardServer.html):
bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
public ChannelPipeline getPipeline() throws Exception {
return Channels.pipeline(new DiscardServerHandler());
}
});
因此,處理程序不共享。我無法找到他們爲什麼要在這裏使用AtomicLong,而不是一個簡單的長期的原因。有人可以解釋嗎?
謝謝!
非常感謝您的確認! –
我們如何確定哪種情況下我們應該使用可共享,或者我們應該創建新的處理程序? –
@Sharable意味着您可以安全地在不同的ChannelPipelines中擁有相同的實例... –