Шилдт об операторе synchronized

478
31 декабря 2016, 14:17

Шилдт утверждает, что внутри блока synchronized должен быть метод объекта того же класса, что и объект, на который ссылается оператор synchronized.

Но у меня всё прекрасно работает и тогда, когда метод принадлежит объекту совсем другого класса. Синхронизация происходит. Я не тем местом читаю?

Вот немного изменённый мною код Шилдта, который он приводит в пример. Только я добавил ещё один класс CallYou, метод объекта которого и синхронизирует synchronized. А в операторе synchronized указана ссылка на старый объект класса CallMe. Имеем ситуацию, когда внутри блока метод другого класса, но результат выводится как по книжке.

class CallMe{
}

class CallYou {
    void call(String msg) {
        System.out.print("[" + msg);
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            System.out.println("Interrupted");
        }
        System.out.println("]");
    }
}

class Caller implements Runnable{
    String msg;
    CallMe target;
    Thread t;
    CallYou target2 =  new CallYou();
    public Caller(CallMe targ, String s){
        target = targ;
        msg = s;
        t = new Thread(this);
        t.start();
    }
    public void run(){
        synchronized(target) {
            target2.call(msg);
        }
    }
}
public class testR1 {
    public static void main(String args[]) {
        CallMe target = new CallMe();
        Caller ob1 = new Caller(target, "Welcome");
        Caller ob2 = new Caller(target, "to synchronized");
        Caller ob3 = new Caller(target, "World!");
        try {
            ob1.t.join();
            ob2.t.join();
            ob3.t.join();
        } catch (InterruptedException e) {
            System.out.println("Interrupted");
        }
    }
}
READ ALSO
Запретить доступ к папке на время работы программы

Запретить доступ к папке на время работы программы

Есть ли способ в Java запретить всем, кроме программы, любой доступ к папке на время выполнения кода программы? Гуглил - не нашел ничего, что...

394
Можно ли теги DIV заворачивать в SPAN?

Можно ли теги DIV заворачивать в SPAN?

Можно ли блочные элементы помещать внутрь строчных?

496
Закрепить верхнюю шапку

Закрепить верхнюю шапку

Есть две секции, которые нужно зафиксировать на вверху страницы, и при прокрутке что бы они оставались вверху

387
упорядочить выравнивание кода в notepad++

упорядочить выравнивание кода в notepad++

Как с помощью клавиатуры упорядочить выравнивание кода в notepad++?

590