This course could be your most productive learning experience
ever! It is aimed at the busy Java professional who wants to
quickly learn and apply new essentials on core Java topics.
All topics have been thoroughly researched by Dr Heinz
Kabutz, famous in
for his Java Specialists'
During the course we use the new Java 8 syntax for lambdas
and streams, making the code more readable. You will learn
about threading, performance, compare-and-swap non-blocking
constructs, garbage collectors and many other topics that you
will be able to quickly apply in your own work. We will also
cover all relevant constructs found in Java 8, such as
StampedLock, LongAdder, parallel streams and many more.
As a side effect, you will get familiar with Java 8 lambdas
Please look at the outline
to see all the topics covered. During the training, you will
always get a chance to try out what you have learned in
carefully thought out exercises. This will help you
understand and quickly internalize what you have just
Is this course for you?
Students who have successfully completed this course, can
expect the following outcomes:
Throughout the course, we use the new Java 8 syntax. The
first outcome would thus be an understanding of how
lambdas and streams work in Java 8.
Students gain a good understanding of why threads are
important and what the risks are. They learn how to share
objects safely, including visibility concerns. They also
master safety techniques of thread confinement, stack
confinement and object confinement. Through this, they
learn how to design a thread-safe class.
They will know the difference between a synchronized and
a concurrent collection and when to use which one. This
is particularly important to be able to write
high-performance code that scales well.
They would understand how a blocking queue can be used to
build producer consumer systems and what the various
blocking queues are in Java.
They would know how Semaphore, CountDownLatch and Phaser
Students would learn how to use the thread pool executors
to run tasks asynchronously. They would also learn how to
configure these, including how to cope with an unexpected
number of tasks and how the various settings interact.
They will learn how to break up a large tasks into
smaller tasks by choosing good task boundaries, resulting
in tasks that are homogeneous and independent.
They would learn how to cleanly cancel tasks that have
been started by using interruptions and volatile boolean
Students would learn how the Fork/Join Pool works by
comparing it to a normal single-threaded recursive
algorithm. They will also get an opportunity to refactor
a piece of Fork/Join Code to use parallel streams
instead, in order to see how Java 8 can make coding a bit
Students would know how to detect and solve liveness
issues, such as deadlock, livelock and contention.
They would also know how to find and solve performance
bottlenecks, especially in threaded code.
They would know how ReentrantLock, ReentrantReadWriteLock
and the new Java 8 StampedLock work and how we can use
that to write efficient code using optimistic techniques.
They would know how to write their own synchronizers when
needed, by creating state-dependent classes.
Students would understand what atomic classes are and
know techniques to use them to build efficient
non-blocking classes that offer better performance under
They would understand the most common garbage collection
algorithms: throughput, concurrent and G1 and also how to
tune each one to give best performance.
They would know how to discover performance bottlenecks
in an application and also how to solve these. They would
also learn how profilers can be used to find bottlenecks
and the role of microbenchmarks in confirming these.
Throughout the course, a strong emphasis is placed on the
practical application of learning. Each student needs to
complete a set of exercises to demonstrate that they have
understood the material.