ho creato un'istanza Subject
in RxJava e chiamare il onNext()
da più thread:È SerializedSubject necessaria per thread-sicurezza in RxJava
PublishSubject<String> subject = PublishSubject.create();
//...
subject.onNext("A"); //thread A
subject.onNext("B"); //thread B
Il RxJava documentation dice che:
fare attenzione a non chiamare il suo metodo
onNext( )
(o il suo altro sui metodi) da più thread, in quanto ciò potrebbe portare a chiamate non serializzate, che violano il contratto Observable e crea un'ambiguità nel risultanteSubject
.
- Devo chiamare
toSerialized()
su taleSubject
assumendo Non mi importa se"A"
va prima o dopo"B"
? Come potrebbe aiutare la serializzazione? - È
Subject
thread-safe in ogni caso o interromperò RxJava senzatoSerialized()
? - Che cos'è il "Contratto osservabile" che la documentazione menziona?
questo è quello che .toSerialized() fa ... –
Quando un'occhiata al codice sorgente: 'SerializedSubject public final toSerialized() { se (getClass() == SerializedSubject.class) { ritorno (SerializedSubject ) questo; } return new SerializedSubject (this); } Nuovo un SerializedSubject invece di utilizzare toSerialized() impedirà di creare nuove istanze non necessarie in memoria, quindi questa risposta è ancora migliore. –
superuser