Users of computer systems are always looking for better performance of their systems. They want to get higher quality videos, better video games, and faster network speeds. Some years ago, processors gave better performance to users by increasing their speed. But now, processors don't increase their speed. Instead of this, they add more cores so that the operating system can execute more than one task at a time. This is called concurrency. Concurrent programming includes all the tools and techniques to have multiple tasks or processes running at the same time in a computer, communicating and synchronizing between them without data loss or inconsistency. In this chapter, we will cover the following topics:
- Basic concurrency concepts
- Possible problems in concurrent applications
- A methodology to design concurrent algorithms
- Java Concurrency API
- Concurrency design patterns
- Tips and tricks to design concurrency algorithms