In this chapter, we've learned how to execute our observable logic on other threads that are different from the main one. There are some simple rules and techniques for doing this, and if everything is followed accordingly, there should be no dangers. Using these techniques, we are able to write concurrent programs. We've also learned how to achieve parallel execution using the schedulers and the
flatMap() operator, and we saw a real-world example of doing that.
Another useful thing that we've examined was how to handle overproducing sources of data. There are a lot of operators that are able to do that by different means, and we introduced some of them, and talked about their usefulness.
With that, we have the knowledge to write arbitrary RxJava programs capable of working with data from different sources. We know how to do this using multiple threads. Using RxJava, its operators, and constructions is almost like coding using a new language. It has its rules and flow control methods...