Course Description
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 6 platform can be used to develop applications using these libraries and features.
Target Student: 
This training course is for experienced Java developers who need to be able to develop advanced applications using the Java programming language. 
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. 
Delivery Method: Instructor led, group-paced, classroom-delivery learning model with structured hands-on activities.
Performance-Based Objectives
At the end of this training course, students should be able to:
- 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 
- Refactor Java 1.4 code to use the Enum types in Java 5 
- Understand multithreading in Java 
- Understand how concurrency works in the Java platform 
- Use the various Java 5 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
 
Course Content
 
| 1. Introduction to Generics  
Java collections Framework Lists, Sets and Maps Traversing Collections Iterable and the for loop Utility methods for collections 2. Advanced Generics  
Defining Generic Types Comparison and Ordering Writing Generic Methods Type wildcards Bounded type wildcards Bounded type parameters Multiple bounds 3. Inner Classes  
What are inner classes Nested classes Member classes Local classes Anonymous classes 4. Enumerated Types  
The int Enum pattern The Java 5 enum Iteration and switching Adding data and methods Constant specific class bodies 5. Introducing Java Threads  
Threads and Runnables Creating Threads Thread termination and cancellation Thread Scheduling Thread Groups Threads and Exceptions | 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 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 8. The Reflection API  
Inside Java classes Class file structure Reflection Accessing Fields, Methods and Constructors Reflective object creation Reflectie method invocation Security 9. Annotations  
Source code metadata Java 5 Annotations Built in annotations Defining annotation types Annotating an annotation type Annotation processing 10. Working with Sockets  
Creating a ServerSocket Creating a Client Working with streams Strategies for Creating multithreaded servers |