"
Writing correct programs is hard; writing correct
concurrent
programs is harder. There are simply more things that can go wrong
in a concurrent program than in a sequential one.
" (Brian Goetz)
Java supports concurrent programming with multiple threads directly
by means of built-in language features. This is one of the many reasons
why Java programmers need to grasp the essence of concurrent programming.
Threads can simplify the development of complex systems by breaking
down one complex activity into several smaller concurrent activities.
It is often more desirable to write several tasks that each perform a single
activities and coordinate them rather than to write a single task that
performs all theactivities.
Threads are the easiest way to exploit the computing power of multiprocessor
systems. With the increasing availability of multicore processors
a growing number of programs need to avoid sequential execution and seek
parallelism by means of multiple threads.
In the IT industry we observe a trend to asynchronous and parallel computing
that aims to increase throughput and scalability. Modern software
architectures circle around asynchrony: NIO with its asynchronous
non-blocking i/o, JMS (Java messaging system), message-driven beans in
EJB, MOM (message oriented middleware), AJAX (asynchronous JavaScript and
XML), SOA (service oriented architecture), just to name a few.
In essence, Java programmers are or will shortly be confronted with
concurrent programming and all its issues of thread safety, synchronization,
dead locks, thread control, task scheduling, etc. Even advanced issues
such as JMM, the Java Memory Model, grow in relevance as more and more
programs run on multicore architectures where sophisticated caching strategies
on the processor level are likely to reveal yet undetected bugs related
to visibility of memory accesses and re-ordering of actions in general.
This seminar aims to give a sound and comprehensive introduction into
concurrent programming in Java, exposes students to programming techniques
and idioms that have been proven useful in practice, and alerts them to
commonly known pitfalls.
|
Prerequisite Courses
and Skills:
|
Basic knowledge of Java (introductory course
or equivalent practical experience). |
|
Duration:
|
4 days |
This is a course for Java programmers who intend to build applications
that are executed concurrently in multiple threads.
The seminar is equally relevant to programmers who do not actively create
threads, but have to prepare their classes for use in multi-threaded environments.
OBJECTIVES
|
Understand concurrency control issues in general |
|
Know the instruments available in Java |
|
Avoid common errors and pitfalls |
|
Understand concurrency control idioms |
The course is designed by Klaus Kreft & Angelika
Langer and backed by years of experience in teaching and more than a decade
of practical experience in industrial software development both in C++
and Java.
Angelika Langer
is a freelance trainer/mentor
in the area of object-oriented software development in C++ and Java.
Klaus Kreft
is a senior consultant for
more than 20 years and has served as the lead architect on several successful
industry projects. He has been working in C++ for many year and works in
Java since 1995.
Both are recognized speakers at OO oonference
and author of numerous articles on C++ and Java topics in various computer
magazines worldwide. Together they write a column for the German Java magazine
JavaSpektrum and are authors of the book "Standard C++ IOStreams
and Locales" and the Online FAQ on Java Generics..
|