Ich versuche, 2 Threads einzurichten, die eine Ganzzahl in einer anderen Klasse entweder erhöhen oder verringern. Ich habe einige Probleme mit der Synchronisierung dieses Attributs.Synchronisiertes Attribut in anderer Klasse
Das ist meine Hauptklasse, wo ich meine Themen und Gegen Klasse einzurichten:
public class Main {
public static void main(String[] arg) {
Counter c = new Counter(10000000);
Thread1 t1 = new Thread1(c);
Runnable2 r2 = new Runnable2(c);
Thread t2 = new Thread(r2);
t1.start();
t2.start();
System.out.println(t.getNumber());
}
}
Dies ist meine Gegen Klasse:
public class Counter{
private int number;
private static final Object countLock = new Object();
public Counter(int number){
this.number= number;
}
public void increase(){
synchronized(countLock){
number++;
}
}
public void decrease(){
synchronized(countLock){
number--;
}
}
public int getNumber(){
return number;
}
}
Und das ist meine Thread1 Klasse: (Die runnable Klasse statt 'erstreckt Thread')
public class Thread1 extends Thread{
private Counter c;
public Thread1(Counter c){
this.c = c;
}
public void run(){
for(int i = 0; i < c.getNumber(); i++){
c.increase();
}
}
}
ist das gleiche, nur mit 'implementiert Runnable'
jedoch meine out put ist immer 10000000. Obwohl ich beide Methoden synchronisiert habe. Gibt es jemanden, der erklären kann, was vor sich geht?
Sie müssen erklären, um das gewünschte Ergebnis haben wollte. Erwarten Sie, dass die 'for' Schleife endet? – bradimus
@Bas Hinzufügen 't1.join(); t2.join(); 'nachdem Sie sie gestartet haben, damit die Threads ihre Aufgabe abschließen, bevor Sie einen Sysout ausführen. Ich glaube nicht, dass der Thread jemals aus der Schleife herauskommen wird, wenn 'c.getNumber()' sich weiter erhöht. Ich glaube du wolltest 'int number = c.getNumber(); für (int i = 0; i
Es tut mir leid Jungs, ich habe realisiert, was ich getan habe. Der erste Thread wird jedes Mal um 1 erhöht und der zweite Thread wird jedes Mal um 1 verringert. Ich habe die Ganzzahl im Zähler auf 10000000 gesetzt, und beide Threads verwenden diese Zahl. Ich habe ein Ergebnis von 0 erwartet, aber ich habe gemerkt, dass das nicht passieren wird, wenn ich die Zahl auf 10000000 setze. Sorry Leute, ich bin nur dumm. – RandomStranger