// Khu 2012-01-21
// Origin CarThread, main extracted into CarSimulation.

public class CarThread2 extends Thread
{
    private static java.util.Random random = new java.util.Random();

    private CarPark carPark;   
	
    private CarThread2 (String name, CarPark carPark)
    {
    	super(name);
	this.carPark = carPark;
    }

    public static Thread newCarThread (int number, CarPark carPark)
    {
        CarThread2 thread = new CarThread ("Car " + number, carPark);
        System.out.println("Car " + number + ": created");
	return thread;
    }
	
    public void run ()
    {
	for (int i = 0; i < numberOfIterations; ++i)
	{
            doIt();
	}
    }

    private void driveAround (int millis) throws InterruptedException
    {
        System.out.println(getName() + ": driving");
        sleep(millis);
    }
       
    private void standStill (int millis) throws InterruptedException
    {
        System.out.println(getName() + ": parking");
        sleep(millis);
    }
   
    private void doIt () throws InterruptedException
    {
        driveAround(random.nextInt(millis));

        System.out.println(getName() + ": requesting carpark");
        carPark.request();

        standStill(random.nextInt(millis));

        System.out.println(getName() + ": leaving carpark");
        carPark.release();
    }
}