Шилдт утверждает, что внутри блока 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");
}
}
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть ли способ в Java запретить всем, кроме программы, любой доступ к папке на время выполнения кода программы? Гуглил - не нашел ничего, что...
Есть две секции, которые нужно зафиксировать на вверху страницы, и при прокрутке что бы они оставались вверху
Как с помощью клавиатуры упорядочить выравнивание кода в notepad++?