when you write Thread t = new Thread(myRunnable); // myRunnable is a reference to Runnable object
the above statement does not create any Thread. so what does it do ? it simply create a Thread object. but as Ayonkar said, it does not create THREAD OF EXECUTION. however when you call t.start(), then actually a new THREAD OF EXECUTION spawns and invoke the run() method of the runnable in a NEW thread. keep in mind the context in which we speak of Thread. let me repeat , Thread t = new Thread(myRunnable) only creates Thread object. when you call run() method the Thread starts running and is in a running state(depending upon the Thread Scheduler).