
package javacodebook.thread.syncblock2;

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;
    
    public SenderThread(String name, MessageQueue queue) {
        super(name);
        this.queue = queue;
    }
    
    public void run() {
        // Der Sender schreibt 8 mal Daten in die MessageQueue und beendet sich
        // anschliessend. Zwischen den Schreibvorgängen schläft der Thread
        // zwischen 0 und 1 Sekunde.
        for (int i=0; i<8; i++) {
            queue.send(getName() + ": " + i);
            sleepRandomly(1000);
        }
    }
    
    private void sleepRandomly(int max) {
        try {
            sleep(random.nextInt(max));
        }
        catch (Exception ignore) {}
    }
}