Hier ist mein Code ein:Warum funktionieren die Gewinde nicht?
private int counter = 0;
public void incC() {
counter++;
System.out.println("Counter is: "+counter + " "+Thread.currentThread().getName());
}
public void printC() {
System.out.println("Counter is: "+counter + " "+Thread.currentThread().getName());
}
public static void main(String args[]) throws Exception {
Stuff stuff = new Stuff();
Thread t1 = new Thread(() -> {
stuff.incC();
});
Thread t2 = new Thread(() -> {
stuff.printC();
});
t1.start();
t2.start();
t1.join();
t2.join();
}
}
Hier ist meine Ausgabe:
Counter is: 1 Thread-1
Counter is: 1 Thread-0
- Hier
t1.join()
zuerst genannt wird. Also sollte Threadt2
nicht auf Threadt1
warten, um zu sterben? - Wie ist es möglich, dass der Thread
t2
zuerst ausgegeben wird, bevort1
?
Nein, 'join()' bewirkt, dass der aktuelle Thread (der 'main'-Thread in diesem Fall) wartet, bis 't1' und' t2' beendet sind. Mit anderen Worten: Die Fäden funktionieren gut. –
Wenn Sie auf die Beendigung von 't1' warten und dann 't2' starten wollen, müssen Sie nach 't1.join()' .... 't2.start()' aufrufen. – Turing85
Was ist das Problem? Die Threads funktionieren wahrscheinlich, Sie müssen den Zugriff auf 'counter' synchronisieren. –