Course in Java Advanced

Advanced course in Java programming

This advanced course in Java, will teach you more about the language and the plattform. You will learn about lambda expressions, stream pipelines, programming of multi-threaded as well as asynchronously executed applications, using modules and much more.
This is what you will learn
  • Lambda expressions
  • Stream pipelines
  • Multi-threaded application
  • Asynchronous applications
  • Design systems with modules
  • Understand the JVM
  • The Java security model
Course Contents

The Java Time-Line

  • Versions
  • Language evolution
  • New version twice a year
  • Oracle Java goes commercial
  • End of $free updates
  • JVM implementation
  • Usage of OpenJDK
  • Using AdoptOpenJDK
  • Using SDKMAN to install Java

Using JShell

  • What is JShell
  • Simple usage
  • Built-in commands
  • Snippets
  • Usage within a Java program

Misc. Features of Java 9/.../12

  • Experimental features activation
  • Switch expressions
  • Automatic type inference
  • Script-mode invocation of single-file source
  • Using Java in a shell script
  • System logger
  • Applets R.I.P.

Functional Interfaces

  • Single Abstract Method (SAM)
  • FunctionalInterface annotation
  • Static method reference
  • Instance method reference
  • Constructor method reference
  • Static methods in interfaces
  • Default methods
  • Overview of java.lang.function
  • Naming rules for interfaces in java.lang.function
  • Language evolution of interfaces, Java 7,8,9

Lambda Expressions

  • What is a lambda expression
  • Basic syntax
  • Lambdas with more than a single expression
  • Capturing lambdas
  • Limitations of the type system

Java API Class Updates

  • Collection factory methods
  • Lambda oriented methods in java.util
  • Understanding Optional<T>

Pipeline Data Streams

  • What is a pipeline data stream
  • The anatomy of a pipeline
  • Stream classes
  • Stream sources
  • Bounded streams
  • Unbounded streams
  • Parallel streams
  • Aggregators
  • Numeric aggregators
  • Using method collect()
  • Using class Collectors
  • Using method reduce()
  • Filters
  • Mappers
  • Sorting

Classic Threads

  • What is a multi-threaded program
  • Simple threads
  • Thread local storage (TLS)
  • Interrupting a thread


  • The ATM problem
  • Critical sections
  • Three conditions for a critical section
  • Understanding synchronized in Java
  • The SWIFT problem
  • Data race
  • Event/condition synchronization
  • Understanding wait and notify/notifyAll


  • What is a deadlock
  • The Werner & Werner problem
  • The Dining Philophers problem
  • Coffmans four conditions for deadlock

Concurrent Data Structures

  • Atomic variables
  • Read/write locks
  • Barriers
  • Thread-safe collections
  • Using class BlockingQueue


  • The benefit of using thread pools
  • Using class ExecutorService
  • Callable<T>
  • Future<T>
  • Periodic tasks

Fork-Join Concurrency

  • What is Fork-Join concurrency
  • Extending class RecursiveTask<T>

OS Processes

  • Obtaning OS process info
  • Listing OS processes
  • Setting up a OS process pipeline

Asynchronous Computation

  • Limitations of Future<T>
  • Limitations of call-backs
  • Interface CompletionStage<T>
  • Understanding class CompletableFuture<T>
  • Consuming the result
  • Trasforming the result
  • Dealing with exceptions
  • Handling multiple async chains
  • Practical samples
  • Extracting links from several web pages

HTTP Client

  • Overview of the new HTTP client
  • Synchronous and asynchronous invocations
  • Simple REST-WS client


  • What is the Java Platform Module System (JPMS)
  • Changes to your source code directory organization
  • The module-info descriptor
  • Java API modules
  • Creating a moduels based project
  • Packing modules into JAR files
  • Creating a shrink-wrapped JRE

Understanding the JVM

  • JVM options
  • Memeory heap
  • Leakage
  • Briefly understanding the GC
  • Using Visual VM
  • JVM JMX beans

Class Loading

  • How the JVM load classes
  • Understanding class ClassLoader
  • Class loader hierachy
  • Byte code verification
  • How to replace selected API classes

The Java Security Model

  • The Java sandbox model
  • The role of a security manager
  • Security policies
  • Policy file syntax
  • Using the policytool
  • Writing a custom security manager
NameJava Advanced
Duration3 Days
Level Advanced
AudienceJava programmers
Prerequisites Practical knowledge in Java programming
  • Java JDK, version 11+
  • JetBrains IntelliJ IDEA
Course Dates
2020-02-17Stockholm19 000 kr
2020-03-09Stockholm19 000 kr
2020-03-30Stockholm19 000 kr
2020-04-14 Stockholm19 000 kr
2020-05-25 Stockholm19 000 kr
2020-06-15 Stockholm19 000 kr

Same-Company Discout

We offer a 20% discount for additional participants from the same company and at the same course date. Read more here.

Teaching Language

Our printed course material is always authored in English. The oral presentation in our classrooms is generally in Swedish, unless all participants agree to that we perform the course in English.

On-Site Course

If you order an On-Site course, we will come to you and hold the course in your office. The price is determined by our price model and is based on the number of course days, number of participants and any travel and lodging.

Read more about out price modell and term of sales here.

Related Courses
CourseDays Level
Java Basics5BeginnerShow
Java Intermediate3IntermediateShow
Threads and Concurrency in Java2Advanced Show
Java for REST Web Services Apps3IntermediateShow