package javacodebook.thread.yield;

import java.util.Random;

/**
 * Demonstration der yield()-Methode. Ohne das yield() in der run()-Methode
 * würde auf einigen Betriebssystemen zuerst Anton komplett durchlaufen und
 * erst anschliessend Berta.
 *
 * @author Mark Donnermeyer
 */
public class YieldedThread extends Thread {
    StringBuffer buffer;
    
    public YieldedThread(String name, StringBuffer buffer) {
        super(name);
        this.buffer = buffer;
    }
    
    public void run() {
        // Der Thread zeigt 6 mal an, dass er lebt.
        for (int i=0; i<6; i++) {
            buffer.append(getName() + ": " + i + "\n");
            // Der Thread ist fair. Andere Threads erhalten nun auch die Chance
            // zu laufen.
            yield();
        }
        buffer.append(getName() + ": fertig\n");
    }
    
    public static void main(String []args) throws Exception {
        StringBuffer buffer = new StringBuffer();
        
        Thread s1 = new YieldedThread("Anton", buffer);
        Thread s2 = new YieldedThread("Berta", buffer);
        
        // Jetzt gehts los. Die Threads werden gestartet.
        s1.start();
        s2.start();
        
        s1.join();
        s2.join();
        
        System.out.println(buffer.toString());
        System.out.flush();
    }
}

