In folgendem Programm werden n Threads gestartet, die unabhängig voneinander die Zahlen 1 bis 1000 ausgeben
Ich wollte in das Programm Thread-Mechanismen einbauen, so dass die Threads nach jeweils 10 Ausgaben auf die anderen warten (Barrier), bevor sie
dann weitermachen.
Mein Quellcode sieht so aus, aber irgendwas läuft schief.
könnte jemand mir helfen ?
vielen Dank im Voraus.
Java:
private final static int NUMBER = 3;
public static void main(String[] args) {
NumberRunner[] runner = new NumberRunner[NUMBER];
for (int i = 0; i < NUMBER; i++) {
runner[i] = new NumberRunner(i);
}
for (int i = 0; i < NUMBER; i++) {
runner[i].start();
}
}
}
class NumberRunner extends Thread {
private int number;
public NumberRunner(int n) {
number = n;
}
@Override
public void run() {
for (int i = 0; i < 1000; i++) {
System.out.println("Thread " + number + ": " + i);
}
}
}
Ich wollte in das Programm Thread-Mechanismen einbauen, so dass die Threads nach jeweils 10 Ausgaben auf die anderen warten (Barrier), bevor sie
dann weitermachen.
Mein Quellcode sieht so aus, aber irgendwas läuft schief.
könnte jemand mir helfen ?
vielen Dank im Voraus.
Java:
public class NumberRunner extends Thread {
private int number;
private static int count = 0;
private static int next = 0;
private static Object obj = new Object();
private static Semaphore sem = new Semaphore(1);
public NumberRunner() {
number = count++;
}
@Override
public void run() {
while(true) {
for (int i = 0; i < 1000; i++) {
synchronized(obj) {
if(number == next) {
for(int k = 0; k < 10; k++) {
System.out.println(getName() + ": " + i);
}
try {
sleep(50);
}catch(InterruptedException e) {
}
next = (next + 1) % 3;
obj.notifyAll();
}else {
try {
obj.wait();
} catch (InterruptedException e) {
}
}
}
}
}
}
}