Die Code-Snippet haben ist:Ein Code-Snippet netty Beispiele aus netty.io scheint Bugs
final ChannelFuture f = ctx.writeAndFlush(time);
f.addListener(new ChannelFutureListener() {
public void operationComplete(ChannelFuture future) {
assert f == future;
ctx.close();
}
});
Was ist, wenn 'final ChannelFuture f geschieht = ctx.writeAndFlush (Zeit); 'führt sehr schnell aus, so dass der nächste addListener
Code noch nicht startet. Wenn die erste Codezeile abgeschlossen ist, benachrichtigt der Thread alle Listener, dass die Operation ausgeführt wurde, aber zu diesem Zeitpunkt gibt es überhaupt keinen Listener! Danach wird ein neuer Listener hinzugefügt, aber es werden keine Benachrichtigungen mehr empfangen!
-Code Quelle: http://netty.io/wiki/user-guide-for-5.x.html
Führt dies zu OutOfMemoryError, wenn der Benutzer vergessen hat, mindestens einen Listener hinzuzufügen? –
Die Zukunft ist Müll gesammelt, sobald es unerreichbar ist, und der Staat ist ziemlich klein, so würde ich sagen, ein OOM ist unwahrscheinlich, es sei denn, Sie gehen aus dem Weg zu Futures in einer Sammlung oder dergleichen. – Nicholas
Diese Erklärung konnte mich jedoch irgendwie nicht überzeugen. Hast du die Quellcodes gelesen? ChannelFuture weiß nicht, wann ein Listener hinzugefügt wird, und weiß auch nicht, wann es das zukünftige Ergebnis für GC-Zwecke freigeben soll, da es gemäß Ihrer Erklärung auf Listener warten würde. –