binäre semaphore

Sonnenblume123

Aktives Mitglied
Hallo zusammen,

ich hab diesen Code gegeben und soll in den mit // markierten Zeilen eine binäre Semaphore implementieren, damit count nur einen Wert annimmt.
Ihr seht, dass ich schon was selbst versucht habe, aber das hat nicht funktioniert....
Code:
import java.util.concurrent.Semaphore;

public class Concurrency {
    public static void main(String[] args) {
        Thread t1 = new Thread(new ConcurrentTask());
        Thread t2 = new Thread(new ConcurrentTask());
        t1.start();
        t2.start();
    }
}
   
class ConcurrentTask implements Runnable {
    private static int count = 1;
    //private Semaphore sem = new Semaphore(1);

    public void run() {
        for (int i = 0; i < 2; i++) {
                //sem.wait();
                count = count * 3;
                //
        }
        //       
    }
}


Vielen Dank im Voraus:)
 

httpdigest

Top Contributor
Zwei Fehler:
- deine Semaphore Variable `sem` ist aktuell eine Instanzvariable/ein Instanzfeld, somit bekommt jede ConcurrentTask Instanz seine eigene Semaphore-Instanz, was nichts bringt, weil ja jetzt beide Threads/Tasks nicht mehr auf dasselbe Objekt synchornisieren. Also entweder du wandelst das Feld in ein statisches Feld um, damit auch beide ConcurrentTask-Instanzen auf dieselbe Semaphore synchronisieren, oder aber du gibst beiden Threads im Konstruktoraufruf dieselbe ConcurrentTask Instanz (instanziierst diese also nur einmal).
- die Methoden, die du auf der Semaphore verwenden solltest, sind acquire() (oder acquireUninterruptibly()) und release()
 

Sonnenblume123

Aktives Mitglied
Code:
import java.util.concurrent.Semaphore;

public class Concurrency {
    public static void main(String[] args) {
        Thread t1 = new Thread(new ConcurrentTask());
        Thread t2 = new Thread(new ConcurrentTask());
        t1.start();
        t2.start();
    }
}
   
class ConcurrentTask implements Runnable {
    private static int count = 1;
    private static Semaphore sem = new Semaphore(1);

    public void run() {
        for (int i = 0; i < 2; i++) {
                try {
                    sem.acquire();
                    count = count * 3;
                    System.out.println(count);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                   
        }
        sem.release();
           
    }
}
Meintest du das so?
Weil wenn ich mal count printe, kommt immer nur 3 raus.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
pkelod Binäre Darstellung Bitwise-Operator Java Basics - Anfänger-Themen 10
M binäre Suche im Intervall Java Basics - Anfänger-Themen 6
M binäre Suche Java Basics - Anfänger-Themen 4
amelie123456 Lineare Suche / Binäre Suche Java Basics - Anfänger-Themen 2
Cassy3 Binäre Bäume Rekursiv durchlaufen und bestimmte Elemente Zählen Java Basics - Anfänger-Themen 6
K Warum ist die binäre Suche bei der verketteten Liste nicht so effektiv? Java Basics - Anfänger-Themen 3
RudiRüssel Binäre Suche, unsortiert, lokales Maximum Java Basics - Anfänger-Themen 15
S Binäre-Suche Algorithmus Java Basics - Anfänger-Themen 1
S Binäre-Suche bei unsortierten Daten Java Basics - Anfänger-Themen 7
L Binäre Suche mit Comparator Java Basics - Anfänger-Themen 5
Aprendiendo Gibt es in der JAVA-API eine Funktion, die eine Dezimalzahl in eine binäre Zahl umwandelt? Java Basics - Anfänger-Themen 8
H Erste Schritte Binäre Suche Java Basics - Anfänger-Themen 37
A Binäre Addition Java Basics - Anfänger-Themen 15
H Rekursion Binäre Suche Java Basics - Anfänger-Themen 2
L Binäre Suche Java Basics - Anfänger-Themen 2
N Array, lineare Suche, binäre Suche, Programm bleibt unerwartet stehen... Java Basics - Anfänger-Themen 6
B Binäre Suche - Junit Test Java Basics - Anfänger-Themen 6
J Binäre Suche eines Array Java Basics - Anfänger-Themen 5
M Methoden Binäre Suche als rekursive Variante Java Basics - Anfänger-Themen 5
B Binäre Suche in einem String Array Java Basics - Anfänger-Themen 10
V Binäre Suchbäume Java Basics - Anfänger-Themen 1
M Binäre Suche Fehler überall =( Java Basics - Anfänger-Themen 2
M Compiler-Fehler Binäre Zahlen in Dezimalzahlen umrechnen Java Basics - Anfänger-Themen 3
K binäre Suchbäume Java Basics - Anfänger-Themen 3
D Binäre Suche für Integerarray in rekursiver Funktion Java Basics - Anfänger-Themen 5
A Binäre Addition Java Basics - Anfänger-Themen 5
W Compiler-Fehler Binäre Suche Java Basics - Anfänger-Themen 2
S Multi-Threaded Binäre Suche Java Basics - Anfänger-Themen 29
A Binäre Suche Java Basics - Anfänger-Themen 2
W Binäre Suche Java Basics - Anfänger-Themen 8
E Binäre Bäume Java Basics - Anfänger-Themen 7
O String Binäre Suche Java Basics - Anfänger-Themen 6
M Binäre Suche, Elemente einfügen Java Basics - Anfänger-Themen 2
0x7F800000 wie pack ich komplette objekte in binäre dateien? Java Basics - Anfänger-Themen 4
A Binäre Suche; Java Basics - Anfänger-Themen 6
F Binäre Exponentiation Java Basics - Anfänger-Themen 9
M binäre Daten als Double einlesen Java Basics - Anfänger-Themen 22
M binäre daten einlesen Java Basics - Anfänger-Themen 2
G Binäre Suchbaum + Erstellung des Programmes Java Basics - Anfänger-Themen 4
R Binäre logische Operatoren Java Basics - Anfänger-Themen 21
B Race Condition mittels Semaphore verhindern Java Basics - Anfänger-Themen 13
S Lost-Update Semaphore Java Basics - Anfänger-Themen 6
tanja Semaphore Java Basics - Anfänger-Themen 2
M Warten bis Thread an einem Semaphore angekommen ist Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben