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...