Concurrent Programming

Course Description

Concurrency and parallelism of processes in a network: simultaneous of calls and services, internal parallelism of call and services processes, concurrency in control flows. Communicating processes, inter-process communication, parallelism and concurrency. Languages for programming of telecommunication functions: process definition, asynchron communication, real time, continuous of operations. Parallelism of processes and scheduling of tasks. Principles of concurrent and distributed programming. Concurrency in object oriented languages. Synchronisation and multithreaded mechanisms. Reactive programming. Programming languages Erlang and Java. Development environment.

General Competencies

Students will deeply understand concepts of concurrency and parallelism in systems and networks. They will gain practical knowledge in concurrent and distributed programming, including concepts of processes and threads, as well as inter-process communication and multithread mechanisms. Students will have practical skills to implement concurrent and distributed applications by using programming languages Java and Erlang.

Learning Outcomes

  1. recognize different types of concurrency
  2. explain concurrency mechanisms
  3. apply concurrency mechanisms in software
  4. analyze different problems in concurrent programs
  5. combine different mechanisms and develop program
  6. compare good and bad properties of some solution

Forms of Teaching


weekly lectures


homework, midterm and final exam

Laboratory Work

work in laboratory

Experimental Exercises

on lectures



Programming Exercises

for homework

Grading Method

Continuous Assessment Exam
Type Threshold Percent of Grade Threshold Percent of Grade
Laboratory Exercises 0 % 20 % 0 % 20 %
Homeworks 0 % 10 % 0 % 10 %
Mid Term Exam: Written 0 % 30 % 0 %
Final Exam: Written 0 % 30 %
Final Exam: Oral 10 %
Exam: Written 0 % 60 %
Exam: Oral 10 %

Students need 50% on oral exam in order to pass exam. Students need to have all homework successfully accomplished.

Week by Week Schedule

  1. Introduction. Program languages - concurrency and parallelism. Development of programming languages, types, properties, application. Network layers, processor and programming models.
  2. Processes and inter-process message passing communication. Visualization of parallelism in programming languages, communication, synchronization.
  3. Declarative programming languages. Programming language Erlang.
  4. Concurrent programming in Erlang. Creating processes, pattern matching, selective and non-selective message receiving, time control, proces registration.
  5. Distributed programming in Erlang. Referential transparency, build-in functions, robustness, process links.
  6. Erlang OTP: programming framework for development of reliable system with fault tolerance, case study
  7. Connecting programs in Erlang and Java: ports, Socket/UDP, JInterface, Thrift
  8. Midterm exam.
  9. Concurrency in object oriented languages. Concurrency extensions and models for object oriented languages. Concurrency in Java. Java threads, thread states, priorities, selfish threads.
  10. Concurrent programming in Java. Synchronization and multi-threaded mechanisms (counting semaphore, synchronized collections, queue synchronization, data exchanger, barrier, lock pattern, thread recycling).
  11. Application of concurrent Java mechanisms, graphics, network server, remote procedure call, alarms.
  12. Concurrent model on web (Java EE, AJAX)
  13. Concurrency in web server: long pooling, WebSocket, connection pool, calling web services.
  14. Case study: experiences from industry and new trends.
  15. Final exam

Study Programmes

University graduate
Telecommunication and Informatics (profile)
Specialization Course (3. semester)



J. Armstrong, R. Virding, C. Vikstroem, M. Williams (1993.), Concurrent Programming in Erlang, Prentice-Hall
D. Lea (1999.), Concurrent Programming in Java - Design Principles and Patterns (2nd edition), Addison Wesley
I. Lovrek, G. Ježžić, S. Deššić, M. Kuššek (2009.), Konkurentno programiranje: Skripta za 1. ciklus predavanja, FER - skripta
M. Kušek (2008.), Konkurentno programiranje: Skripta za 2. ciklus predavanja, FER - skripta
I. Lovrek, G. Ježić, M. Kušek (2008.), Konkurentno programiranje: Skripta za 3. ciklus predavanja, FER - skripta

Laboratory exercises


ID 127420
  Winter semester
L1 English Level
L1 e-Learning
30 Lectures
0 Exercises
15 Laboratory exercises
0 Project laboratory

Grading System

85 Excellent
75 Very Good
65 Good
55 Acceptable