Netty推薦addListener回調異步執行


說明

Netty推薦使用addListener的方式來回調異步執行的結果,這種方式優於Future.get,能夠更精確地把握異步執行結束的時間。

錯誤理解使用addListener的方式

代碼如下:

代碼運行結果:

疑惑:很疑惑啊,按照上面Netty推薦使用addListener的方式來回調異步執行的結果,這種方式優於Future.get,能夠更精確地把握異步執行結束的時間。而且也停頓了5s了,為什么還是順序執行的呢?

感謝閃電俠、芋艿、曉峰的熱心解答

分析

這段代碼 怎么執行都是順序執行,不阻塞 最后,reactor線程里面都是同步的。

我們來跟蹤代碼進行查看:

關鍵在這里,執行完成write之后返回promise。

如果是reactor那么就順序執行,否則就加入隊列等待后續執行(如果是順序的就是等執行完成返回,如果是加入隊列就是異步)

這里重點不在writeAndFlush,先分析同步是執行的情況,異步的下面正確方式會分析,如果是同步方式:

也就是設置了值,之后promise之后返回。

那么:

所有就變成了java里面最普通的代碼,一個線程代碼從上到下執行。也解釋了為什么沒有走異步情況了。

正確理解使用addListener的方式

不在reactor線程里面執行,就可以做到最開始提到的:Netty推薦使用addListener的方式來回調異步執行的結果,這種方式優於Future.get,能夠更精確地把握異步執行結束的時間。

執行效果如下:

繼續進行分析:

關鍵在這里,執行完成write之后返回promise。

由於是異步直接返回,其實isDone為false,之后addListener就很快添加完成,就執行下面語句了。

這里也可以看到是writeAndFlush執行完成之后調用回調事件,這樣才是真正做到了異步執行。

總結

由於之前理解不深刻,感謝閃電俠、芋艿、曉峰的熱心解答,現在開朗多了,Netty繼續學習中……,希望今天文章對你有所有收獲!!!

文章github源代碼地址:nettydemo,或者公號回復“Netty”獲取源碼地址。


如果讀完覺得有收獲的話,歡迎點贊、關注、加公眾號【匠心零度】,查閱更多精彩歷史!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM