Course intended for:

The training is intended for Java programmers wanting to get familiar with the issues of multithread application development.

Course objective:

The training objective is to get the users familiar with theoretic and practical aspects of multithread programming in Java language. During the training, basic concepts associated with concurrent computing will be presented, as well as selected theoretical issues, such as prioritization models, starving, deadlock and its solving, exclusion in access or lack of it, design patterns associated with concurrent computing or methods for improvement of performance of multithread programs. The participants will also discuss and practice the functionality and mechanisms available in J2SE, used for development of concurrent programs, divided into Java platform versions, in which they have been published: Java 7, Java 5 and the preceding versions: data collections, concurrency pattern realization, methods of excluding and synchronizing, concurrency in GUI and classes for implementation of concurrent "divide and rule" algorithms.

The training participants will encounter various problems and traps that emerge during development of multithread applications, and the material and course of exercises allow them to identify these and avoid them in the future.

Course strengths:

During the training, the participants will implement concurrent programming pattern realizations, compare them with solutions delivered by Java platform and then use the latter for development of concurrent algorithms. Thanks to the format of the training, it allows the participants to understand the underlying concepts of the java.util.concurrent library, and knowledge on multithread programming will be built "from the start". The knowledge acquired will be useful in creation of multithread applications, to a great extent, independently of the language applied. The training curriculum is largely focused on reproducing various errors in concurrent applications in order to understand them.


The training participants are required to have the Java programming skills (to be learned at the course J/JP).

Course parameters:

5*8 hours (5*7 net hours) of lectures and workshops (with a visible emphasis on workshops).

Group size: no more than 8-10 participants.

Course curriculum

  1. Introduction to multithreading

    1. Concurrent, parallel and serial processing

    2. Preemption and lack of preemption

    3. Thread and process

    4. Multithreading realization models

    5. The thread priority in Java and in the Operating System

    6. Communication between processes and communication between threads

    7. Semafor, Mutex

  2. Multithreading in Java, low level mechanisms and other issues

    1. Thread life cycle control

    2. Thread parameters

    3. Thread grouping

    4. Handling of exceptions in threads

    5. Monitor, „synchronized" and wait/notify

    6. Thread Local storage

    7. Timer

    8. Starting of new processes

    9. Threads in Swing and AWT

    10. Concurrent Mark-Sweep GC

    11. Memory barriers and Java memory model

    12. volatile, final, lazySet and CAS

  3. Problems with multithreading programming

    1. Exemplary structures of a multithreaded program

    2. Race, atomic operations

    3. Deadlock and Livelock

    4. Starving and Priority Inversion

    5. Dekker’s algorithm

  4. Design patterns for multithreading programs

    1. Synchronization patterns

    2. Concurrency patterns

    3. Initialization patterns

    4. Event management patterns

  5. Concurrency library in Java 5

    1. Atomic variable classes and atomic operations in Java 5

    2. Lock interfaces – Lock, ReadWriteLock

    3. Condition

    4. BlockingQueue

    5. Thread safe collections

    6. Synchronizers

    7. Tasks and Future

    8. Concurrent performance of tasks

  6. Discussing of new issues in Java 7 associated with concurrence

  7. Optimization of concurrent solutions

    1. Sources of decrease of performance in concurrence

    2. Reduction of lock contention

    3. Amdahl’s law

Any questions?

* Required.

Phone +48 22 2035600
Fax +48 22 2035601