hudrogen
@hudrogen

Почему не работает пример синхронизации метода из книги Шилдта Java 8?

Реализую примеры с книги Шилдта "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("Прервано в синхронизации!");
        }
    }
}
  • Вопрос задан
  • 369 просмотров
Решения вопроса 1
jaxtr
@jaxtr
JavaEE/Spring-разработчик
Потому что в примере метод call класса CallMe не синхронизованный, а у тебя - синхронизированный
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
zagayevskiy
@zagayevskiy Куратор тега Java
Android developer at Yandex
Не знаю, что там у Шилдта но этот код не будет работать, как вы рассказываете. Три потока стартуют и выполняют работу в рандомном порядке. То что они джойнятся в таком порядке - вообще никак не влияет. Возможно, это пример, как делать не надо.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы