There are three main ways to create and start a new thread in Java: 1) by extending the Thread class, 2) by implementing the Runnable interface, and 3) by using an anonymous class that implements Runnable. The Thread scheduler determines which thread will execute first based on priority and other factors. The main thread lifecycle states are new, runnable, running, and dead. Methods like yield(), join(), setPriority(), etc. allow controlling thread behavior.