/**
   Modified version of an example from TutorialsPoint
 */
public class RunnableDemo {
    public static void main(String[] args) {
	ThreadDemo t1 = new ThreadDemo("A"); 
	ThreadDemo t2 = new ThreadDemo("B");
	t1.startThread();
	t2.startThread();

	ThreadDemo t3 = new ThreadDemo("C"); 
	t3.startThread();

	ThreadDemo t4 = new ThreadDemo("D"); 
	t4.startThread();

	System.out.println(Thread.currentThread());
    }
}


class ThreadDemo implements Runnable {
    
    private Thread t;
    private String threadName;

    public ThreadDemo(String n) {
	System.out.println("Creating thread-" + n );
	threadName = n;
    }

    public void run() {
	System.out.println("Running thread-" + threadName);
	for(int i = 0; i < 10; i++) {
	    System.out.println("thread-" + Thread.currentThread() + ", i=" + i);
	    try {
		Thread.sleep(10);
	    }
	    catch(InterruptedException e) {
		System.out.println("No sleep for thread-" + threadName);
	    }
	}
	System.out.println("Exiting thread-" + threadName);
    }

    public void startThread() {
	if(t == null) {
	    System.out.println("Starting thread-" + threadName);
	    t = new Thread(this, threadName);
	    t.start();
	}
    }
}
