В документации говоритВ настоящее время бегущая нить удерживает замок во время сна?
во время сна на тему не освобождает замки он держит
Однако мой фрагмент кода демонстрирует это релиз замке
public class SynchronizationTest {
public static void main(String[] args) {
Common c = new Common();
new PersonONE(c);
new PersonTWO(c);
}
}
class Common {
private String message = "This is shared message";
public String getMessage() {
return message;
}
}
class PersonONE extends Thread {
private Common c;
public PersonONE(Common c) {
this.c = c;
start();
}
@Override
public void run() {
synchronized (c.getClass()) {
for (int i = 0; i < 5; i++) {
System.out.println("PersonONE: " + c.getMessage());
try {
Thread.currentThread().sleep(100);
} catch (InterruptedException e) {}
}
}
}
}
class PersonTWO extends Thread {
private Common c;
public PersonTWO(Common c) {
this.c = c;
start();
}
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println("PersonTWO: "+c.getMessage());
try {
Thread.sleep(100);
} catch (InterruptedException e){}
}
}
}
Выход
PersonONE: Это общее сообщение
PersonTWO: Это общее сообщение
PersonONE: Это общее сообщение
PersonTWO: Это общее сообщение
PersonONE: Это общее сообщение
PersonTWO: Это общее сообщение
PersonONE : Это сообщение разделяет
PersonTWO: Это сообщение разделяет
PersonONE: Это сообщение разделяет
PersonTWO: Это сообщение разделяет
Итак, вопрос в том, где я ошибаюсь?
Вы не объясните, как вы пришли к заключению, которое вы достигли из представленных вами доказательств. –
Если возможно, попробуйте реализовать Runnable вместо продолжения Thread. Это лучшая практика. – JFPicard
@JFPicard: в опубликованном коде есть нарушение правил. –