Реализую примеры с книги Шилдта "Java 8 Полное руководство"
Глава 11 Применение синхронизированных методов стр 301-302.
Ожидается, что на консоль выведется [Добро пожаловать][в сихронизированный][мир!]
В действительном результате последовательность вывода смештвается и не соответствует вызовам join()
Имеется 3 класса
public class CallMe {
synchronized void call(String msg){
System.out.print("[" + msg);
try {
Thread.sleep(2000);
} catch (Exception e) {
System.out.println("Прервано");
}
System.out.println("]");
}
}
public class Caller implements Runnable {
String msg;
CallMe target;
Thread t;
public Caller(CallMe target, String msg) {
this.target = target;
this.msg = msg;
t = new Thread(this);
t.start();
}
@Override
public void run() {
target.call(msg);
}
}
public class Synch {
public static void main(String[] args) {
CallMe target = new CallMe();
Caller ob1 = new Caller(target, "Добро пожаловать");
Caller ob2 = new Caller(target, "в снхронизированный");
Caller ob3 = new Caller(target, "мир!");
try {
ob1.t.join();
ob2.t.join();
ob3.t.join();
} catch (InterruptedException e) {
System.out.println("Прервано в синхронизации!");
}
}
}