https://krishnakishorev.medium.com/java-multithreading-concurrency-and-parallelism-part-1-a218c8da75df