In other words, run() is where you put exactly what your thread should
do when it runs.
At the risk of oversimplifying, you might think of run as being like a "main" method for a thread. When a
Java program is executed, the JVM automatically invokes main behind the scenes, and this is the entry point for what the program does. In a similar fashion, when a thread is
started (by calling start), the thread scheduler automatically invokes run behind the scenes, and this is the "entry point" for what the thread does.