Jfokus Training

About Jfokus Training

Get taught directly by the experts and interact with peers in an engaging informal environment. These are intensive, deep dive training sessions designed for advanced IT professionals which incorporate expert-led presentations.

Heinz Kabutz

3 Days: Java 8 Concurrency Performance Course

Heinz Kabutz, JavaSpecialists.EU


The Extreme Java - Concurrency Performance for Java 8 Course is authored by Dr Heinz Kabutz, the publisher of The Java Specialists' Newsletter. It includes (under license) training material produced by JavaPerformanceTuning.com. It is based on our bestselling Java Specialist Master Concurrency Specialist courses.

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 over 135 countries for his Java Specialists' Newsletter.

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 and streams.

When: 26-28 April 2017

Where: Stockholm, Sweden

Language: English

Format: Bring your own laptop

Price: 26 500 SEK

15% discount when booking before 1 March

All prices excl. Swedish VAT and incl. lunch


Register here

If you answer "yes!" to any of the following questions, then this course is for you:

  • Has your system ever caused some strange behaviors that you could not explain? This often happens at the worst time, such as when your system is very busy. Imagine losing your biggest shopping day!
  • Have you ever wondered how some of the more advanced Java constructs work, such as the ConcurrentHashMap or ConcurrentLinkedQueue?
  • Would you like to find out how ReadWriteLocks can cause serious starvation?
  • Have you ever programmed a web application, a servlet, a JSP page, a Swing application?
  • Are you an above average Java programmer, interested to learn more?

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 learned.

This course is ideally suited to the professional Java programmer with at least 2 years experience, who would like to learn how to truly understand Java concurrency.

Course outline

Read about the course outline http://www.javaspecialists.eu/


Richard Warburton
Raoul-Gabriel Urma

3 Days: Modern Development with Java 8

Richard Warburton, Monotonic Ltd

Raoul-Gabriel Urma, University of Cambridge


Java 8 isn't your parents Java anymore and was the largest update to Java in its history. Now with Java 9s release some of the best ideas from functional programming are migrating their way into this release. This means easier to read, more flexible code that scales to multicore. Join us to learn about Java 8 and 9 on this hands on 3 day course.
At the end of this course, you will be ready to use the newest tips and tools for Java on your day job and be familiar with the cutting edge programming approaches which allow you to write more flexible and concise code.

When: 10-12 April 2017

Where: Stockholm, Sweden

Language: English

Format: Bring your own laptop

Price: 23 500 SEK

15% discount when booking before 1 March

All prices excl. Swedish VAT and incl. lunch


Register here

Day 1

Lambda Expressions

  • Why Java 8?
  • Behaviour parameterisation
  • More flexible code
  • Anonymous classes
  • What is a lambda?
  • Syntax
  • Functional interfaces: where to use lambda expressions?
  • java.util.function
  • Refactoring/putting together exercise
  • Method references: firstclass
  • functions in Java 8
  • Method references recipes
  • Type checking
  • Type inference
  • Using local variables


  • Collection Processing
  • What is a Stream?
  • Stream operations and patterns
  • Filtering
  • Mapping
  • Finding and Matching
  • Reducing
  • minBy/maxBy
  • Stream Optimization
  • the reduce pattern
  • Eager vs Lazy
  • Shortcircuiting and Loop Fusion

Exercise: financial data processing (part 1)


  • Grouping and partitioning
  • Collection Operations
  • Collecting to lists and sets
  • Flexible Collection
  • Arithmetic collectors
  • Max/Min
  • Average/Count/Sum
  • Summary statistics
  • Advanced Queries
  • Beyond grouping and partitioning
  • Downstream collectors

Exercise: financial data processing (part 2)

Mutable Reduction

  • Extending the reduce pattern
  • Reducing collector

Day 2

Easy Data Parallelism

  • What is Data Parallelism?
  • Why is this important?
  • Parallelising your streams
  • Parallel Gotchas
  • Misuse of reduce
  • Dont use Locks
  • Danger of mutability
  • Decomposing performance

Testing & Debugging Lambda Expressions

  • Unit testing lambda expressions
  • Debugging with laziness
  • Stack traces

Practical: Hands on Debugging

Default and static methods on interfaces

  • Motivation for default methods
  • Static methods in interface
  • Useful default methods
  • Patterns for default methods
  • Resolution rules

Enhanced Design with Lambdas

  • Execute around: resource handling
  • Deferred execution: Logging
  • Design patterns
  • Command
  • Strategy
  • Observer
  • Template
  • Factory
  • Processing pipeline

Date & Time in Java 8

  • The problem with existing date and time libraries
  • The core classes: LocalDate/LocalTime
  • Common API Patterns

Optional data types

  • The problem with null
  • How Optional improves upon null
  • How to use Optional in your code
  • Creating Optional objects
  • Default values and actions
  • Transforming Optionals with map
  • Chaining Optionals with flatMap
  • Rejecting values with filter

Day 3

Asynchronous vs Synchronous Programming

  • Servlets

  • Asynchronous Servlets (3.0) & Spring

  • Why use asynchronous communications?

    • Performance
    • Testability
    • Fault Tolerance
  • Timeouts

Approaches to Concurrency

  • The Reactive Manifesto and Functional Reactive Programming

  • Models of Concurrency

    • Event Based
    • Promises
    • The Actor Model
    • Reactive Streams

Promises using Completable Futures

  • Motivation

  • Composition

  • Exception handling

  • Alternative Promise Implementations

The Actor Model with Akka

  • What are Actors?

  • Using Akka

  • Testing actors

  • Alternative Actor Implementations

Reactive Streams with RxJava

  • Introducing Reactive Streams

  • Pull vs. push models

  • Using RxJava

  • Java 9 Flow API

  • Alternative Reactive Stream Implementations



Back to the top of the page