Я пытался синхронизировать геттеры с добавлением synchronized
к методам, но у меня всегда есть John Odd
и Jane Doe
.Любое предложение, как я могу синхронизировать две строки в этом случае?
это мой код:
public class HonorBoard {
private volatile String firstName;
private volatile String lastName;
public void set(String firstName, String lastName) {
synchronized (this) {
this.firstName = firstName;
this.lastName = lastName;
}
}
private synchronized String getFirstName() {
return firstName ;
}
private synchronized String getLastName() {
return lastName;
}
@Override
public synchronized String toString() {
return firstName + ' ' + lastName;
}
public static void main(String[] args) {
HonorBoard board = new HonorBoard();
new Thread(() -> {
for (;;) {
board.set("John", "Doe");
}
}).start();
new Thread(() -> {
for (;;) {
board.set("Jane", "Odd");
}
}).start();
new Thread(() -> {
for (;;) {
System.out.println(board.getFirstName() + ' ' + board.getLastName());
}
}).start();
}
}