2016-09-14 7 views
2

Мне было интересно, каковы были последствия вызова subscribeOn() в теме.Использование subscribeOn() с темой

Я понимаю, что (по умолчанию) это не изменит, какие элементы нити испускаются, мне просто интересно, может ли это вызвать другие негативные побочные эффекты.

В общем, вызывает ли subscribe() то же Observable из разных потоков небезопасным? Если это так, то subscribeOn() каким-то образом делает это безопасным?

ответ

1

Вызов subscribe() на том же Subject из разных потоков является безопасным (обратите внимание, что вызов subject.doOnXXX из разных потоков необходимо синхронизировать, попросите уточнить, если вам это нужно). Обобщение того, что для всех Observables невозможно, потому что достаточно легко создать тот, который не является потокобезопасным (скажем, с проблемами видимости). Вы правы в том, что вы могли бы сделать не-поточно-Observable поточно-с помощью

.subscribeOn(Schedulers.from(Executors.newSingleThreadExecutor())) 

Использование планировщика с более чем одной нити не будет защищать вас с точки зрения безопасности потока.