You should read this book to learn the basic of reactive programming with Reactive Streams and understand what they are good for, when they should be used, and the principles behind them. This book uses straightforward examples and introduces concepts gradually so as not to overwhelm the reader. It will refer to existing models of concurrency from time to time only as reference points and will not assume any advanced knowledge on the topic.
After reading this book, you should have a firm understanding of Reactive Streams, including three different implementations, and how to integrate them into real software projects. You will understand when to use Reactive Streams, how to write tests, and how to build a whole project.