Modern Java: Virtual Threads & High-Throughput Services
Project Loom, Structured Concurrency & JVM Performance
8 modules, 40 lessons: Ecosystem And Toolchain; Types, Modern Syntax, And Generics; Collections, Streams, And Optional; Exceptions And Concurrency; JSON And Testing; Spring Boot Fundamentals; Building APIs With Spring Boot; Persistence And Integration Testing.
Intermediate · 2 hours · 40 lessons · 67 labs
Who it is for
Intermediate level.
For developers who know some Java or another object-oriented language and want to build and test a production-ready API with modern Java and Spring Boot.
What you don't need yet:
- No Spring Boot experience: you start from dependency injection
- No Maven or Gradle experience: both build tools are covered
- Nothing to install: runnable labs open in an online sandbox
What helps:
- Basic Java or object-oriented syntax: classes, methods and types
Before you start:
- Basic Java or object-oriented syntax
Take first:
Take next:
- Oracle Certified Professional: Java SE 21 Developer (1Z0-830) Exam Prep — Advanced
- Modern .NET Core, C# & Enterprise Microservices — Intermediate
Learning paths:
Nobody needs to know everything before they start. Each course builds on the one before, so a learning path takes you there step by step.
Labs
67 labs, 23 of them graded: you write the code, it runs, and graded labs check the result. The outline lists each lesson's labs.
What is free
Start free: First module free with an account. Pro: Every course, lab, handbook, practice exam and certificate.
- Pro monthly — $29 a month. Every course, lab, handbook, practice exam and certificate
- Pro yearly — $249 a year. Every course, lab, handbook, practice exam and certificate
Course outline
Ecosystem And Toolchain
- The Virtual Machine, The Kit And The Runtime (3 labs): You can say exactly what the virtual machine, the runtime and the development kit each are, compile and run a program by hand without a build tool, and read the bytecode a class file holds.
- Release Trains And Long Term Support (3 labs): You can explain the six month release train, say what long term support actually guarantees, read the version of a running machine, and target an older release from a newer compiler.
- The Lifecycle Of A Java Program (4 labs): You can trace a program from source to class file to loaded class to native code, explain when a class is initialised, and use the single file launcher for a quick script.
- The Toolchain: Maven (4 labs): You can read a project object model file, name the coordinates of a dependency, run the build lifecycle through the wrapper, and say which phase produced which file under the target directory.
- The Toolchain: Gradle (3 labs): You can read a Gradle build script, run its test task through the wrapper, explain what up to date means, and choose between Maven and Gradle for a new service with reasons.
Types, Modern Syntax, And Generics
- Primitive And Reference Types (3 labs): You can choose suitable primitive and reference types, explain boxing, and avoid accidental null values at an API boundary.
- Generics Fundamentals (3 labs): You can define and use generic classes and methods, read type parameters, and explain why generic collections prevent casts.
- Records And Data Classes (3 labs): You can model immutable API data with records and know when a full class is the better choice.
- Sealed Types And Exhaustiveness (3 labs): You can constrain an inheritance hierarchy with sealed types and make every permitted case explicit in a switch.
- Pattern Matching And Text Blocks (3 labs): You can use pattern matching to narrow values safely and text blocks to keep multi line payloads readable.
Collections, Streams, And Optional
- The Collections Framework (2 labs): You can choose lists, sets, and maps by the access and uniqueness guarantees your API needs.
- Generics And Collections (2 labs): You can read wildcard collection types and write methods that safely consume or produce generic values.
- The Streams API (2 labs): You can build a stream pipeline that filters, transforms, and collects data without mutating its source.
- Advanced Stream Operations (2 labs): You can sort, flatten, group, and short circuit stream pipelines while keeping their cost visible.
- Handling Nulls With Optional (2 labs): You can use Optional to model a possibly missing result without hiding null checks inside business logic.
Exceptions And Concurrency
- Checked Versus Unchecked Exceptions (1 lab): You can distinguish checked and unchecked exceptions and choose a boundary where each failure should be handled.
- The Cost Of Checked Exceptions (1 lab): You can assess checked exception costs across layers and translate unstable library failures into stable service errors.
- Concurrency Basics: Threads And Runnable (1 lab): You can start a thread safely, describe shared state risks, and join work before returning a result.
- The ExecutorService (1 lab): You can submit tasks to an executor, collect futures, and shut the pool down without leaking worker threads.
- Async With CompletableFuture (1 lab): You can compose asynchronous stages, combine results, and handle failures with CompletableFuture.
JSON And Testing
- Serialization And JSON (1 lab): You can explain serialization, JSON shape, and why wire contracts need explicit models.
- Working With Jackson (1 lab): You can configure Jackson for records, read JSON into types, and keep serialization failures at an API boundary.
- Testing Basics With JUnit 5 (1 lab): You can structure a JUnit five test around a behavior and read failures as feedback about a contract.
- Fluent Assertions With AssertJ (1 lab): You can use AssertJ assertions that describe values, collections, and exceptions in readable failure messages.
- Designing Testable Code (1 lab): You can separate side effects from decisions and inject collaborators so unit tests stay fast and focused.
Spring Boot Fundamentals
- Dependency Injection And The IoC Container (1 lab): You can explain inversion of control and define constructor injected Spring beans.
- Spring Boot Auto Configuration (1 lab): You can describe how Spring Boot selects infrastructure from the classpath and explicit application settings.
- Configuration And Profiles (1 lab): You can bind typed configuration and select environment specific profiles without changing application code.
- The Spring Bean Lifecycle (1 lab): You can place initialization and cleanup at the correct Spring lifecycle boundary.
- Packaging Into A Container (1 lab): You can package a Spring Boot jar with a multi stage container build and run it as a non root process.
Building APIs With Spring Boot
- Controllers And Routing (1 lab): You can map HTTP requests to Spring controllers and keep transport code separate from application services.
- Reading The Request (1 lab): You can bind path variables, query parameters, headers, and request bodies to typed controller arguments.
- Validation (1 lab): You can validate request models with Jakarta constraints and return useful field errors to clients.
- Exception Handling To Problem Details (1 lab): You can map application failures to consistent RFC problem detail responses with controller advice.
- Implementing An OpenAPI Contract (1 lab): You can implement a documented OpenAPI route with matching models, status codes, and error responses.
Persistence And Integration Testing
- Persistence With JPA And Hibernate (1 lab): You can map a domain record to a JPA entity and understand what Hibernate manages for you.
- Spring Data Repositories (1 lab): You can define a repository interface, choose query methods deliberately, and keep persistence details out of controllers.
- Testing APIs With MockMvc (1 lab): You can exercise Spring MVC routes with MockMvc and assert status, headers, and JSON response fields.
- Database Integration With Testcontainers (1 lab): You can run repository tests against a disposable real database and keep schema assumptions visible.
- Tying It All Together (1 lab): You can trace an API request through controller, service, repository, database, and tested response.