How is default new thread name given in java?
new Thread(new Fabric());
Since Fabric
is a Thread, you created 2 threads here :)
JDK8 code:
/* For autonumbering anonymous threads. */private static int threadInitNumber;private static synchronized int nextThreadNum() { return threadInitNumber++;}
The default numeric value in the Thread name is an incremented value unless the name is specified when creating the Thread. Fabric
extends Thread
, and you are passing the Fabric
instance to create another Thread - thus the internal Thread counter is incremented twice as 2 threads are created during the process.
If you change the program like given below you will get the thread numbering in sequence.
public class Fabric extends Thread { public static void main(String[] args) { Thread t1 = new Fabric(); Thread t2 = new Fabric(); Thread t3 = new Fabric(); t1.start(); t2.start(); t3.start(); } public void run() { for(int i = 0; i < 2; i++) System.out.print(Thread.currentThread().getName() + " "); }}
and the output is
Thread-0 Thread-2 Thread-2 Thread-1 Thread-0 Thread-1