"Well, hello Amigo! I hope you don't have any grandiose plans for the evening, because I have found a sensible selection of materials on multithreading for your enjoyment.
Better together: Java and the Thread class.
Part I — Threads of execution. Multithreading was built into Java from the very beginning. Let's first recall where threads come from and how they are organized.
Part 2 — Synchronization. This article is dedicated to the basic means of synchronization between threads. We'll explore monitors, locks, and synchronization.
Part 3 — Interaction. An overview of the particulars of how threads interact. We'll explore the problems that may arise as threads interact, and we'll talk about how to avoid them.
Part 4 — Callable, Future, and friends. This part will explain how to work with multithreaded calculations and what relevant tools appeared in Java 1.8. Why do we need the Future interface and its implementation in the CompletableFuture class?
Part V — Executor, ThreadPool, Fork/Join. Here we will try to remember Executor, thread pools, and the fork/join framework. You will learn how to use all this and what else you should read.
Part 6 — Fire away! In the final part, we will consider the synchronization mechanisms available in Java and summarize."