One last concurrency operator that we need to cover is unsubscribeOn()
. When you dispose an Observable
, sometimes, that can be an expensive operation depending on the nature of the source. For instance, if your Observable
is emitting the results of a database query using RxJava-JDBC, (https://github.com/davidmoten/rxjava-jdbc) it can be expensive to stop and dispose that Observable
because it needs to shut down the JDBC resources it is using.
This can cause the thread that calls dispose()
to become busy, as it will be doing all the work stopping an Observable
subscription and disposing it. If this is a UI thread in JavaFX or Android (for instance, because a CANCEL PROCESSING
button was clicked), this can cause undesirable UI freezing because the UI thread is working to stop and dispose the Observable
operation.
Here is a simple Observable
that is emitting every one second. We stop the main thread for three seconds, and then it will call dispose()
to shut the operation down...