Multithreading
Starting a new thread
Starting a thread and waiting for it
Asynchronous call
Asynchronous call with a result
Synchronization with the main thread
Synchronization with locks
Using a thread pool
Using parallelStream
Passing variables to a thread