Я пытаюсь реализовать синхронизацию, используя следующий код, но не работает должным образом.Нити синхронизации не работают
class Callme extends Thread{
synchronized void call() {
System.out.print("[" + "Hello");
try {
Thread.sleep(1000);
} catch(InterruptedException e) {
System.out.println("Interrupted");
}
System.out.println("]");
}
public void run()
{
call();
}
}
public class Threads {
static void main(String args[]) {
Callme target = new Callme();
Callme target2 = new Callme();
target.start();
target2.start();
}}
Выход должен быть [Hello] [Hello], но это что-то вроде [Hello [Hello]], который не синхронизирован.
Добавить 'static' перед' synchronized void call() {'. – saka1029
Зачем должен выводиться '[Hello] [Hello]'? Независимо от того, какие рассуждения привели вас к этому ожиданию, это проблема. –
@DavidSchwartz Поскольку вызов() является синхронизированным методом, а другой поток «target2» не может получить к нему доступ, пока текущий поток «target1» не обратится к методу call(). – toadalskiii