Hallo,
ich habe diesen Code gegeben:
Die Aufgabe war, dass sichergestellt wird, dass in der for Schleife der main-Methode maximal eine Instanz der Klasse ThreadA und maximal eine Instanz der Klasse ThreadB nebenläufig ausgeführt werden.
Meine Lösung sieht ihr in den Kommentaren. Ich dachte nämlich, dass sich so das Problem lösen lässt, bevor ein neuer Schleifendurchlauf beginnt, wird der alte Thread beendet.
Stimmt ihr mir da zu?
Dann sollte noch ohne meine Anpassung mit join eine Semaphore verwendet, die sicherstellt, dass nur ein Thread auf die gemeinsame Variable common zugreift. Dazu meine Lösung:
Stimmt ihr mir da zu?
Vielen Dank im Voraus Und für die bisherige Hilfe in diesem Forum
ich habe diesen Code gegeben:
Java:
public class Synch {
public static int common = 0;
public static class ThreadA extends Thread {
public void run() {
for (int i = 0; i < 100; i++) {
common = common + 1;
}
}
}
public static class ThreadB extends Thread {
public void run() {
for (int i = 0; i < 100; i++) {
common = common + 1;
}
}
}
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
common = 0;
Thread a = new ThreadA();
Thread b = new ThreadB();
a.start();
b.start();
//a.join();
//b.join(); mit try/catch behandeln
}
}
}
Die Aufgabe war, dass sichergestellt wird, dass in der for Schleife der main-Methode maximal eine Instanz der Klasse ThreadA und maximal eine Instanz der Klasse ThreadB nebenläufig ausgeführt werden.
Meine Lösung sieht ihr in den Kommentaren. Ich dachte nämlich, dass sich so das Problem lösen lässt, bevor ein neuer Schleifendurchlauf beginnt, wird der alte Thread beendet.
Stimmt ihr mir da zu?
Dann sollte noch ohne meine Anpassung mit join eine Semaphore verwendet, die sicherstellt, dass nur ein Thread auf die gemeinsame Variable common zugreift. Dazu meine Lösung:
Java:
import java.util.concurrent.Semaphore;
public class Synch2 {
public static int common = 0;
public static Semaphore sem = new Semaphore(1, true);
public static class ThreadA extends Thread {
public void run() {
try {
sem.acquire();
} catch (InterruptedException e) {}
for (int i = 0; i < 100; i++) {
common = common + 1;
}
sem.release();
}
}
public static class ThreadB extends Thread {
public void run() {
try {
sem.acquire();
} catch (InterruptedException e) {}
for (int i = 0; i < 100; i++) {
common = common + 1;
}
sem.release();
}
}
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
common = 0;
Thread a = new ThreadA();
Thread b = new ThreadB();
a.start();
b.start();
}
}
}
Stimmt ihr mir da zu?
Vielen Dank im Voraus Und für die bisherige Hilfe in diesem Forum