
package javacodebook.thread.wait_notify;

import java.util.Random;

/**
 * Ein sendender Thread. Er schreibt in eine MessageQueue Nachrichten, die von
 * einem anderen Thread wieder aus der Queue ausgelesen werden können.
 *
 * @author Mark Donnermeyer
 */
class SenderThread extends Thread {
    private static Random random = new Random(System.currentTimeMillis());
    
    private MessageQueue queue;
    private int sleepMax;
    
    /*
     * Der Thread wird mit einem Namen und der MessageQueue initialisiert
     */
    public SenderThread(String name, MessageQueue queue, int sleepMax) {
        super(name);
        this.queue = queue;
        this.sleepMax = sleepMax;
    }
    
    /**
     * Der Thread schreibt Nachrichten in die MessageQueue und schläft
     * zwischendurch für eine zufällige Zeit lang.
     */
    public void run() {
        int index = 0;
        while(true) {
            queue.send(getName() + " " + index);
            index++;
            sleepRandomly();
        }
    }
    
    private void sleepRandomly() {
        try {
            sleep(random.nextInt(sleepMax));
        }
        catch (Exception ignore) {}
    }
}