public class IteratingThread extends Thread
{
	protected static int numberOfThreads = 3;
	protected static int numberOfIterations = 100;
	
	public IteratingThread (String name)
	{
		super(name);
	}
	
	private Thread newThread (int number)
	{
		IteratingThread thread =
			new IteratingThread
                            ("IteratingThread " + number + "(" + 
                            numberOfThreads + ", " + numberOfIterations + ")");
		return thread;
	}
	
	private void parseMoreArgs (String[] args) {}
	private void doIt () {}
	
	private IteratingThread (String[] args)
	{
		super("Root Thread");
		try
		{
			if (args.length > 0)
			{
				numberOfThreads = Integer.parseInt(args[0]);
				if (args.length > 1)
				{
					numberOfIterations = 
                                                Integer.parseInt(args[1]);
					if (args.length > 2)
					{
						parseMoreArgs(args);
					}
				}
			}
		}
		catch(NumberFormatException e)
		{
			System.out.println
                          ("If 1 or 2 arguments, then integer expected! --- " + 
                            e.toString());
		}
		for (int i = 0; i < numberOfThreads; i++)
		{
			Thread thread = newThread(i);
			thread.start();
		}
	}
	
	public void run ()
	{
		for (int i = 0; i < numberOfIterations; i++)
		{
			System.out.println(getName() + ": iteration " + i);
			doIt();
		}
	}
	
	public static void main (String[] args)
	{
		IteratingThread thread = new IteratingThread(args);
	}
}