// @topic T11806 Multithreading -- Order Queue demo
// @brief class OrderTaker extends Thread

package pckg;

public class OrderTaker extends Thread
{
    private static int orderNumber = 1;

    private int count = 0;
    private int maxOrders;
    private OrderQueue orderQueue;
    
    // constructors
    public OrderTaker( int orderCount, OrderQueue orderQueue )
    {
        this.maxOrders = orderCount;     // orders to create
        this.orderQueue = orderQueue;    // order queue
    }

    // operations

    @Override
    /**Worker thread task: add specified number of orders to the queue*/
    public void run()
    {
        Order order;
        while ( count < maxOrders )
        {
            order = new Order( getOrderNumber() );
            // add order to the queue
            orderQueue.pushOrder( order );

            System.out.println(
                order.toString() +
                " created by " + this.getName()
                );
            count++;
            try
            {
                Thread.sleep( 1000 );  // delay one second
            }
            catch ( InterruptedException ex )
            {
                // ignore interruptions
            }
        }
    }

    /**System-wide safe order number generator*/
    private static synchronized int getOrderNumber()
    {
        return orderNumber++;
    }
}//class OrderTaker