考虑下面这段 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
的值是多少?是2000还是小于2000?我得到的答案是小于2000。如果每个线程都被同步,那么两个线程如何同时调用getNumber()
或setNumber()
?请注意保留所有HTML标签。