Ist SerializedSubject für Thread-Sicherheit in RxJava erforderlich

8

Ich habe eine Subject Instanz in RxJava erstellt und rufe onNext() von mehreren Threads auf:

%Vor%

Die RxJava-Dokumentation sagt Folgendes:

  

Achten Sie darauf, dass Sie die Methode onNext( ) (oder die anderen Methoden) nicht aus mehreren Threads aufrufen, da dies zu nicht serialisierten Aufrufen führen könnte, die den Observable-Vertrag verletzen und eine Mehrdeutigkeit in der resultierenden Subject verursachen.

  • Muss ich toSerialized() für solch eine Subject aufrufen, vorausgesetzt, es ist mir egal, ob "A" vor oder nach "B" geht? Wie würde die Serialisierung helfen?
  • Ist Subject thread-safe trotzdem oder werde ich RxJava ohne toSerialized() ?
  • brechen?
  • Was ist der " beobachtbare Vertrag ", den die Dokumentation erwähnt?
John Beff 05.08.2015, 20:02
quelle

2 Antworten

7
  

Muss ich toSerialized () bei einem solchen Betreff anrufen, wenn es mir egal ist, ob "A" vor oder nach "B" geht?

Verwenden Sie toSerialized() , da alle Operatoren, die auf das Subjekt angewendet wurden, davon ausgehen, dass die korrekte Serialisierung stromaufwärts erfolgt. Der Datenstrom kann fehlschlagen oder unerwartete Ergebnisse liefern, wenn dies nicht geschieht.

  

Ist der Betreff trotzdem threadsicher oder bricht ich RxJava ohne toSerialized ()?

oben beantwortet

  

Was ist der "beobachtbare Vertrag", den die Dokumentation erwähnt?

Rx Design Guidelines.pdf In Abschnitt 4 wird der Observable-Vertrag definiert . Ich denke, RxJava Dokumentation sollte dies besser erkennbar machen, so werde ich ein Problem melden.

    
Dave Moten 06.08.2015, 02:00
quelle
2

Laut Daves Antwort können Sie, wenn Sie vorher wissen, dass auf Ihr Thema von verschiedenen Threads aus zugegriffen wird, es in ein SerializedSubject einbinden. Ссылка

  

Umschließt einen Betreff, so dass es sicher ist, verschiedene Methoden aus verschiedenen Threads aufzurufen.

wie: private final Subject<Object, Object> bus = new SerializedSubject<Object, Object>(PublishSubject.create());

(entnommen aus Ben Christensens EventBus-Beispiel hier: Ссылка )

    
Steffen Funke 08.08.2015 11:46
quelle

Tags und Links