Myślałem że rozumiem zasadę działania synchronized w jave ale chyba jednak tak nie jest stworzyłem sobie prościutki programik:
public class Main {
public static void main(String[] args) {
Thread a= new A();
Thread b= new Thread(new B());
a.start();
b.start();
}
public synchronized static void wypisz(String tekst){
System.out.println(tekst);
}
}
public class A extends Thread{
public void run() {
while(true){
Main.wypisz("A");
}
}
}
public class B implements Runnable {
public void run() {
while (true) {
Main.wypisz("B");
}
}
}
Zakładałem że skoro startuje wątek "a" to zanim on wykona to proste wypisanie "b" będzie już czekał na monitorze to znaczy wątki będą na przemian wypisywać na konsole ciąg ababababab tymczasem dostaje długie ciągi literek "A" z rzadka przerywanych ciągami literek "B", zastanawiam się co mi tu umyka;/
wydłużałem czas operacji wypisz, usypiałem wątki na pewien czas to pozwala zbliżyć się do wspominanej przeplatanki, ale to nie jest to... Otrzymanie takiego efektu semaforami to pikuś ale czemu nie udaje mi się tego zrobić synchronized nie mam pojęcia :(
Był bym wdzięczny za jakąś wskazówkę