/* Listing2211.java */ class Counter2211 { int cnt; public Counter2211(int cnt) { this.cnt = cnt; } public int nextNumber() { int ret = cnt; //Hier erfolgen ein paar zeitaufwändige Berechnungen, um //so zu tun, als sei das Errechnen des Nachfolgezählers //eine langwierige Operation, die leicht durch den //Scheduler unterbrochen werden kann. double x = 1.0, y, z; for (int i= 0; i < 1000; ++i) { x = Math.sin((x*i%35)*1.13); y = Math.log(x+10.0); z = Math.sqrt(x+y); } //Jetzt ist der Wert gefunden cnt++; return ret; } } public class Listing2211 extends Thread { private String name; private Counter2211 counter; public Listing2211(String name, Counter2211 counter) { this.name = name; this.counter = counter; } public static void main(String[] args) { Thread[] t = new Thread[5]; Counter2211 cnt = new Counter2211(10); for (int i = 0; i < 5; ++i) { t[i] = new Listing2211("Thread-"+i,cnt); t[i].start(); } } public void run() { while (true) { System.out.println(counter.nextNumber()+" for "+name); } } }