---
title: Concurrency
description: Concurrency is the execution of multiple instruction sequences at the same time. Learners will understand how to manage shared resources, prevent race conditions, and implement multi-threading to build efficient, responsive, and high-performance software applications.
category: programming-tech
subcategory: operating-systems
difficulty: beginner, intermediate, advanced
url: /subject/concurrency
---

# Concurrency

Concurrency is the execution of multiple instruction sequences at the same time. Learners will understand how to manage shared resources, prevent race conditions, and implement multi-threading to build efficient, responsive, and high-performance software applications.

## Available Resources

2 Books • 2 Courses • 2 Websites

## Websites

### 1. CS140 Concurrency Notes (Stanford)

Stanford's operating systems course site, with lecture slides and the Pintos kernel projects. It covers processes, threads, synchronization primitives, scheduling, virtual memory and file systems, so students implement the concurrency mechanisms rather than only reading about them.

**Difficulty:** Beginner | **Price:** Free

**Link:** https://cs140.stanford.edu/

**Tags:** operating-systems, concurrency, synchronization, threads, pintos

### 2. osdev.org

OSDev.org is a community-driven resource and wiki for operating system development. It offers tutorials, articles, and sample code on topics like kernels, bootloaders, memory management, drivers, and other low-level OS concepts, plus forums for discussion.

**Difficulty:** Intermediate | **Language:** English | **Price:** Free

**Link:** https://osdev.org

**Tags:** websites, technology-computer-science, computer-sciences

## Courses

### 1. Operating Systems: Three Easy Pieces

Learn concurrency in operating systems with this course from Remzi & Andrea Arpaci-Dusseau, based on "Operating Systems: Three Easy Pieces."

**Difficulty:** Advanced | **Price:** Free

**Link:** https://pages.cs.wisc.edu/~remzi/OSTEP/

**Tags:** operating-systems, concurrency, virtual-memory, file-systems, textbook

### 2. Concurrent Programming

This course teaches learners (industry professionals and students) the fundamental concepts of concurrent programming in the context of Java 8.   Concurrent programming enables developers to efficiently and correctly mediate the use of shared resources in parallel programs.  By the end of this course, you will learn how to use basic concurrency constructs in Java such as threads, locks, critical sections, atomic variables, isolation, actors, optimistic concurrency and concurrent collections, as well as their theoretical foundations (e.g., progress guarantees, deadlock, livelock, starvation, linearizability).

Why take this course?

•	It is important for you to be aware of the theoretical foundations of concurrency to avoid common but subtle programming errors. 
•	Java 8 has modernized many of the concurrency constructs since the early days of threads and locks.
•	During the course, you will have online access to the instructor and mentors to get individualized answers to your questions posted on the forums.
•	Each of the four modules in the course includes an assigned mini-project that will provide you with the necessary hands-on experience to use the concepts learned in the course on your own, after the course ends.

The desired learning outcomes of this course are as follows:

•	Concurrency theory: progress guarantees, deadlock, livelock, starvation, linearizability
•	Use of threads and structured/unstructured locks in Java
•	Atomic variables and isolation
•	Optimistic concurrency and concurrent collections in Java (e.g., concurrent queues, concurrent  hashmaps)
•	Actor model in Java

Mastery of these concepts will enable you to immediately apply them in the context of concurrent Java programs, and will also help you master other concurrent programming system that you may encounter in the future  (e.g., POSIX threads, .NET threads).

**Difficulty:** Beginner | **Language:** English | **Duration:** Four weeks of study, 4-8 hours/week depending on past experience with sequential programming in Java | **Price:** Free

**Link:** https://www.coursera.org/learn/concurrent-programming-in-java

**Tags:** courses, technology-computer-science, operating-systems

## Books

### 1. The Art of Multiprocessor Programming

**Author:** Maurice Herlihy, Nir Shavit

Textbook on shared-memory multiprocessor programming, moving from mutual exclusion and consensus theory to practical concurrent data structures: locks, queues, stacks, hash sets, skiplists and transactional memory. Readers learn to design and reason about correctness of lock-free algorithms.

**Difficulty:** Intermediate | **Language:** English | **Price:** Paid

**Link:** https://www.amazon.com/dp/0123705916?tag=edmonddante07-20

**Tags:** books, technology-computer-science, operating-systems

### 2. Concurrent Programming in Java

**Author:** Doug Lea

Design-patterns treatment of Java concurrency: safety and liveness, exclusion, state-dependent actions, confinement, and constructs for splitting work across threads. Readers gain a vocabulary for structuring multithreaded programs and the reasoning to judge whether a design is correct.

**Difficulty:** Intermediate | **Language:** English | **Price:** Paid

**Link:** https://www.amazon.com/dp/0201310090?tag=edmonddante07-20

**Tags:** books, technology-computer-science, operating-systems

---

*This content is part of Dantes.io - Your Treasure Map to Knowledge*

*Curated by humans at Dantes.io. Personal study use welcome; republishing this curation requires permission (team@dantes.io).*

View this page online: https://dantes.io/subject/concurrency