Most of the time, when we are building fairly simple applications, we do not require concurrency. Simple, sequential programming works just fine, in which one step executes after the completion of another. But as application use cases become more and more complex, and there are an increased number of tasks that can easily be pushed into the background to improve the application's user experience, we end up revolving around the concept of concurrency.
Concurrency is a different beast in itself and makes the task of programming much more complex. But regardless of the added complexity, concurrency also brings a lot of features to improve the user experience of applications.
Before we dive into the question of why we may require the support of concurrency in our enterprise applications, let's first look at a simple example in which we will see concurrency...