Informações sobre o curso
4.5
263 classificações
39 avaliações
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)....
Globe

cursos 100% online

Comece imediatamente e aprenda em seu próprio cronograma.
Calendar

Prazos flexíveis

Redefinir os prazos de acordo com sua programação.
Intermediate Level

Nível intermediário

Clock

Sugerido: Four weeks of study, 4-8 hours/week depending on past experience with sequential programming in Java

Aprox. 12 horas restantes
Comment Dots

English

Legendas: English

Habilidades que você terá

Concurrency (Computer Science)Actor ModelOptimistic Concurrency ControlJava Concurrency
Globe

cursos 100% online

Comece imediatamente e aprenda em seu próprio cronograma.
Calendar

Prazos flexíveis

Redefinir os prazos de acordo com sua programação.
Intermediate Level

Nível intermediário

Clock

Sugerido: Four weeks of study, 4-8 hours/week depending on past experience with sequential programming in Java

Aprox. 12 horas restantes
Comment Dots

English

Legendas: English

Programa - O que você aprenderá com este curso

1

Seção
Clock
1 hora para concluir

Welcome to the Course!

Welcome to Concurrent Programming in Java! This course is designed as a three-part series and covers a theme or body of knowledge through various video lectures, demonstrations, and coding projects....
Reading
1 vídeo (Total de 1 min), 5 leituras, 1 teste
Video1 vídeos
Reading5 leituras
General Course Info5min
Course Icon Legend2min
Discussion Forum Guidelines2min
Pre-Course Survey10min
Mini Project 0: Setup10min
Clock
4 horas para concluir

Threads and Locks

In this module, we will learn about threads and locks, which have served as primitive building blocks for concurrent programming for over five decades. All computing platforms today include some form of support for threads and locks, and make them available for use by developers in a wide range of programming languages. We will learn how threads can be created, joined, and synchronized using structured (e.g., synchronized statements/methods) and unstructured (e.g., java.util.concurrent libraries) locks in Java. We will also learn about new classes of bugs that can arise when concurrent programs need to access shared resources. These bugs are referred to as violations of liveness/progress guarantees, and include deadlock, livelock, and starvation. We will conclude this module by studying different solutions to the classical "Dining Philosophers" problem, and use these solutions to illustrate instances of deadlock, livelock and starvation....
Reading
6 vídeos (Total de 41 min), 6 leituras, 2 testes
Video6 videos
1.2 Structured Locks7min
1.3 Unstructured Locks7min
1.4 Liveness7min
1.5 Dining Philosophers8min
Demonstration: Locking and Synchronization4min
Reading6 leituras
1.1 Lecture Summary5min
1.2 Lecture Summary5min
1.3 Lecture Summary5min
1.4 Lecture Summary5min
1.5 Lecture Summary5min
Mini Project 1: Locking and Synchronization10min
Quiz1 exercício prático
Module 1 Quiz30min

2

Seção
Clock
4 horas para concluir

Critical Sections and Isolation

In this module, we will learn different approaches to coordinating accesses to shared resources without encountering the deadlock or livelock bugs studied earlier. Critical/isolated sections are higher-level concurrent programming constructs (relative to locks) that simplify the implementation of mutual exclusion by guaranteeing the absence of deadlocks and livelocks. Object-based isolation relaxes the constraints imposed by critical sections by allowing mutual exclusion to be specified on a per-object basis, as illustrated in the Spanning Tree example. Java's atomic variables represent an important, but restricted, case of object-based isolation that is implemented efficiently on all hardware platforms. Finally, we will learn how object-based isolation can be further relaxed with read/write access modes....
Reading
6 vídeos (Total de 36 min), 6 leituras, 2 testes
Video6 videos
2.2 Object Based Isolation (Monitors)7min
2.3 Concurrent Spanning Tree Algorithm6min
2.4 Atomic Variables6min
2.5 Read, Write Isolation5min
Demonstration: Global and Object-Based Isolation3min
Reading6 leituras
2.1 Lecture Summary10min
2.2 Lecture Summary10min
2.3 Lecture Summary10min
2.4 Lecture Summary10min
2.5 Lecture Summary10min
Mini Project 2: Global and Object-Based Isolation10min
Quiz1 exercício prático
Module 2 Quiz33min
Clock
20 minutos para concluir

Talking to Two Sigma: Using it in the Field

Join Professor Vivek Sarkar as he talks with Software Engineer, Dr. Shams Imam, at their downtown Houston, Texas office about threads, locks, deadlocks, high-level and low-level constructs, and the importance of concurrent programming. ...
Reading
2 vídeos (Total de 10 min), 1 leitura
Video2 videos
Industry Professional on Concurrency - Dr. Shams Imam, Software Engineer3min
Reading1 leituras
About these Talks10min

3

Seção
Clock
4 horas para concluir

Actors

In this module, we will learn another high-level approach to concurrent programming called the "Actor" model. A major difference between the Actor model and the Isolated Sections model is that there are no data races possible in the Actor model because it does not allow for any form of shared variables. However, as in all concurrent programming models, higher-level forms of nondeterminism are still possible in the Actor model due to an inherent asynchrony in the order in which messages may be delivered. We will study multiple examples of concurrency using the Actor model, including the classical Sieve of Eratosthenes algorithm to generate prime numbers, as well as producer-consumer patterns with both unbounded and bounded buffers....
Reading
6 vídeos (Total de 29 min), 6 leituras, 2 testes
Video6 videos
3.2 Actor Examples6min
3.3 Sieve of Eratosthenes Algorithm5min
3.4 Producer-Consumer Problem4min
3.5 Bounded Buffer Problem3min
Demonstration: Sieve of Eratosthenes Using Actor Parallelism3min
Reading6 leituras
3.1 Lecture Summary10min
3.2 Lecture Summary10min
3.3 Lecture Summary10min
3.4 Lecture Summary10min
3.5 Lecture Summary10min
Mini Project 3: Sieve of Eratosthenes Using Actor Parallelism10min
Quiz1 exercício prático
Module 3 Quiz30min

4

Seção
Clock
4 horas para concluir

Concurrent Data Structures

In this module, we will study Concurrent Data Structures, which form an essential software layer in all multithreaded programming systems. First, we will learn about Optimistic Concurrency, an important multithreaded pattern in which two threads can "optimistically" make progress on their assigned work without worrying about mutual conflicts, and only checking for conflicts before "committing" the results of their work. We will then study the widely-used Concurrent Queue data structure. Even though the APIs for using concurrent queues are very simple, their implementations using the Optimistic Concurrency model can be complex and error-prone. To that end, we will also learn the formal notion of Linearizability to better understand correctness requirements for concurrent data structures. We will then study Concurrent Hash Maps, another widely-used concurrent data structure. Finally, we discuss a concurrent algorithm for finding a Minimum Spanning Tree of an undirected graph, an algorithm that relies on the use of Concurrent Data Structures under the covers....
Reading
6 vídeos (Total de 38 min), 7 leituras, 2 testes
Video6 videos
4.2 Concurrent Queue5min
4.3 Linearizability6min
4.4 Concurrent Hash Map5min
4.5 Concurrent Minimum Spanning Tree Algorithm7min
Demonstration: Parallelization of Boruvka's Minimum Spanning Tree Algorithm7min
Reading7 leituras
4.1 Lecture Summary10min
4.2 Lecture Summary10min
4.3 Lecture Summary10min
4.4 Lecture Summary10min
4.5 Lecture Summary10min
Mini Project 4: Parallelization of Boruvka's Minimum Spanning Tree Algorithm10min
Exit Survey10min
Quiz1 exercício prático
Module 4 Quiz30min
Clock
15 minutos para concluir

Continue Your Journey with the Specialization "Parallel, Concurrent, and Distributed Programming in Java"

The next two videos will showcase the importance of learning about Parallel Programming and Distributed Programming in Java. Professor Vivek Sarkar will speak with industry professionals at Two Sigma about how the topics of our other two courses are utilized in the field....
Reading
2 vídeos (Total de 13 min), 1 leitura
Video2 videos
Industry Professional on Distribution - Dr. Eric Allen, Senior Vice President, Two Sigma6min
Reading1 leituras
Our Other Course Offerings2min
4.5

Melhores avaliações

por PSSep 2nd 2017

Great course. With minimal effort you can learn about important concepts and see immediate results regarding the actual speedup you can achieve using concurrent programming.

por SMNov 12th 2017

This was a good course and covered all the topics relevant to the course. I liked the Optimistic Concurrency in week 4 - that was an area I was not exposed to before

Instrutores

Vivek Sarkar

Professor
Department of Computer Science

Sobre Rice University

Rice University is consistently ranked among the top 20 universities in the U.S. and the top 100 in the world. Rice has highly respected schools of Architecture, Business, Continuing Studies, Engineering, Humanities, Music, Natural Sciences and Social Sciences and is home to the Baker Institute for Public Policy....

Sobre o Programa de cursos integrados Parallel, Concurrent, and Distributed Programming in Java

Parallel, concurrent, and distributed programming underlies software in multiple domains, ranging from biomedical research to financial services. This specialization is intended for anyone with a basic knowledge of sequential programming in Java, who is motivated to learn how to write parallel, concurrent and distributed programs. Through a collection of three courses (which may be taken in any order or separately), you will learn foundational topics in Parallelism, Concurrency, and Distribution. These courses will prepare you for multithreaded and distributed programming for a wide range of computer platforms, from mobile devices to cloud computing servers. To see an overview video for this Specialization, click here! For an interview with two early-career software engineers on the relevance of parallel computing to their jobs, click here. Acknowledgments The instructor, Prof. Vivek Sarkar, would like to thank Dr. Max Grossman for his contributions to the mini-projects and other course material, Dr. Zoran Budimlic for his contributions to the quizzes, Dr. Max Grossman and Dr. Shams Imam for their contributions to the pedagogic PCDP library used in some of the mini-projects, and all members of the Rice Online team who contributed to the development of the course content (including Martin Calvi, Annette Howe, Seth Tyger, and Chong Zhou)....
Parallel, Concurrent, and Distributed Programming in Java

Perguntas Frequentes – FAQ

  • Once you enroll for a Certificate, you’ll have access to all videos, quizzes, and programming assignments (if applicable). Peer review assignments can only be submitted and reviewed once your session has begun. If you choose to explore the course without purchasing, you may not be able to access certain assignments.

  • When you enroll in the course, you get access to all of the courses in the Specialization, and you earn a certificate when you complete the work. Your electronic Certificate will be added to your Accomplishments page - from there, you can print your Certificate or add it to your LinkedIn profile. If you only want to read and view the course content, you can audit the course for free.

Mais dúvidas? Visite o Central de Ajuda ao Aprendiz.