import java.io.*;
import java.lang.*;

public class PrintWords extends Thread {
    private String word;  // what word to print
    private int delay;    // how long to pause (in milliseconds)
  
    public PrintWords(String whatToSay, int delayTime) {
        word = whatToSay;
        delay = delayTime;
    }

    public void run() {
        try {
            for (;;) {
                System.out.print(word + " ");
                sleep(delay);   // pause before printing next word
            }
        } catch (InterruptedException e) {
            return;   // end this thread
        }
    }

    public static void main(String[] args) {
	int numThreads = 0;
	boolean error;
	
	BufferedReader input = new BufferedReader( new InputStreamReader(System.in));
	
	System.out.println("Please enter how many threads to create:");

	do {
	    try {
		numThreads = Integer.parseInt(input.readLine());
		error = false;
	    }
	    catch(IOException e) { 
                System.out.println("Input error, please re-enter the number of threads:"); 
		error = true;
            }
	    catch(NumberFormatException numErr) { 
      		System.out.println("Number format error, please re-enter the number of threads:");
		error = true;
	    }
	} while(error);
	
	//Create the arrays now
	int delay[] = new int[numThreads];
	String name[] = new String[numThreads];

	for(int i = 0; i < numThreads; ++i) {
            System.out.println("Please enter a name for thread " + (i+1) + ":");
	    do  {
		try { 
		     name[i] = input.readLine();
		     error = false;
		} catch(IOException numErr) {
		     System.out.println("Input error, please re-enter delay:");
		     error = true;
		}
            } while(error);
	
	    System.out.println("Please enter a delay for thread " + (i+1) + ":");
	    do {
	       try {
  		     delay[i] = Integer.parseInt(input.readLine());
		     error = false;
		} catch(IOException numErr) {
		     System.out.println("Input error, please re-enter delay:");
		     error = true;
	        } catch(NumberFormatException numErr) {
		     System.out.println("Number format error, re-enter delay:");
		     error = true;
	        }
	    } while(error);
	}
	
	System.out.println("Dispatching threads...");
	for(int i = 0; i < numThreads; ++i) {
	    new PrintWords(name[i], delay[i]).start();
	}
    }
}


