この Java コードを考えると:
class Account {
private Integer number = 0;
public synchronized void setNumber(Integer number) {
this.number = number;
}
public synchronized Integer getNumber() {
return number;
}
}
class Client extends Thread {
Account account;
public Client(Account account) {
this.account = account;
}
public void run() {
for (int i = 1; i <= 1000; i++) {
account.setNumber(account.getNumber() + 1);
}
}
}
public class Run {
public static void main(String[] args) throws Exception {
Account account = new Account();
Client one = new Client(account);
Client two = new Client(account);
one.start();
two.start();
one.join();
two.join();
System.out.println("Exiting main");
System.out.println("account number value: " +account.getNumber());
}
}
number
main メソッドが完了したときの値は? 2000 年ですか、それとも 2000 年未満ですか。2000 未満になっています。それぞれが同期されている場合、2 つのスレッドが同時にgetNumer()
orsetNumber()
を呼び出すにはどうすればよいでしょうか?run()