https://medium.com/@espinosa.edilson/explaining-multithreading-in-java-in-simplest-terms-8989a1b93b60