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. */ public class UnyieldedThread extends Thread { StringBuffer buffer; public UnyieldedThread(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"); } buffer.append(getName() + ": fertig\n"); } public static void main(String []args) throws Exception { StringBuffer buffer = new StringBuffer(); Thread s1 = new UnyieldedThread("Anton", buffer); Thread s2 = new UnyieldedThread("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(); } } --- Neue Klasse --- 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. */ 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(); } }