Advanced Java Programming

Contact Us for Dates
3 days practical workshop for up to 12 people.

Contact us for Onsite Price

This advanced training course is for experienced Java developers who need to go into more depth into the core features of the language that are not typically covered on basic Java programming courses. The course details subjects that get cursory coverage in most books and courses, like generics, multithreading, socket programming, synchronization, and annotation development and looks at how the Java 8 platform can be used to develop applications using these libraries and features.


This training course combines lectures with practical exercises that help the delegates to put what they have learned on the training course into practice.  The exercises specifically build on what has been recently taught and are built up as the training course progresses.

Training Course Objectives

  • Understand and work with generic types and collections
  • Understand the wild card and bounded features within generics
  • Read and write inner classes and understand where they should be applied
  • Understand multithreading in Java
  • Understand how concurrency works in the Java platform
  • Use the various Java threading libraries to implement robust multithreaded applications
  • Understand the structure of a class file
  • Use the reflection API to interact with a class file
  • Create and use Java annotations
  • Create single threaded and multithreaded servers using sockets
  • Create server client applications using sockets

Who it is for

This training course is for experienced Java developers who need to be able to develop advanced applications using the Java programming language.

Training Course Prerequisites

  • The training course assumes that delegates are already Java programmers.
  • It assumes knowledge of the object-oriented paradigm as object oriented theory is not covered in the content of the training course.


Chapter 1 Introduction to Generics

  • Java collections Framework
  • Lists, Sets and Maps
  • Traversing Collections
  • Iterable
  • Utility methods for collections

Chapter 2 Advanced Generics

  • Defining Generic Types
  • Comparison and Ordering
  • Writing Generic Methods
  • Type wildcards
  • Bounded type wildcards
  • Bounded type parameters
  • Multiple bounds

Chapter 3 Inner Classes

  • What are inner classes
  • Nested classes
  • Member classes
  • Local classes
  • Anonymous classes

Chapter 4 Enumerated Types

  • The int Enum pattern
  • The Java enum
  • Iteration and switching
  • Adding data and methods
  • Constant specific class bodies

Chapter 5 Introducing Java Threads

  • Threads and Runnables
  • Creating Threads
  • Thread termination and cancellation
  • Thread Scheduling
  • Thread Groups
  • Threads and Exceptions

Chapter 6 Synchronization

  • Why worry about synchronization?
  • Basic monitor functionality
  • Memory model and data visibility
  • Lock objects
  • Atomic data types
  • Synchronizing execution
  • Producer consumer problem and solutions
  • Condition objects
  • Semaphores
  • Latches
  • Cyclic barriers

Chapter 7 High Level Concurrency Support

  • The java.util.concurrent library
  • Concurrent collections
  • Queues and Synchronization
  • Task Management
  • Executor Framework and Thread Pools
  • Tasks, Callables, and Future Objects
  • The Completion Service

Chapter 8 The Reflection API

  • Inside Java classes
  • Class file structure
  • Reflection
  • Accessing Fields, Methods and Constructors
  • Reflective object creation
  • Reflectie method invocation
  • Security

Chapter 9 Annotations

  • Source code metadata
  • Java Annotations
  • Built in annotations
  • Defining annotation types
  • Annotating an annotation type
  • Annotation processing

Chapter 10 Working with Sockets

  • Creating a ServerSocket
  • Creating a Client
  • Working with streams
  • Strategies for Creating multithreaded servers