我經歷了一本書,看到說,下面代碼的代碼是線程同步:同步在java中給人意想不到的輸出
// Account類
public class Account {
private double balance;
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
public synchronized void addAmount(double amount) {
double tmp=balance;
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
tmp+=amount;
balance=tmp;
}
public synchronized void subtractAmount(double amount) {
double tmp=balance;
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
tmp-=amount;
balance=tmp;
}
}
//銀行類
public class Bank implements Runnable {
private Account account;
public Bank(Account account) {
this.account=account;
}
@Override
public void run() {
for (int i=0; i<1000; i++){
account.subtractAmount(1000);
}
}
}
//公司類
public class Company implements Runnable {
private Account account;
public Company(Account account) {
this.account=account;
}
@Override
public void run() {
for (int i=0; i<1000; i++){
account.addAmount(1000);
}
}
}
//主類
public class Main {
public static void main(String[] args) {
Account account=new Account();
account.setBalance(1000);
Company company=new Company(account);
Thread companyThread=new Thread(company);
Bank bank=new Bank(account);
Thread bankThread=new Thread(bank);
System.out.printf("Account : Initial Balance: %f\n",account.
getBalance());
companyThread.start();
bankThread.start();
try {
companyThread.join();
bankThread.join();
System.out.printf("Account : Final Balance: %f\n",account.
getBalance());
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
兩個不同的對象的這裏有兩個線程正在發生變化,在使用addAmount和subtractAmount功能的同時平衡的變量,但它總是給人右輸出作爲聲母韻母平衡相同即1000.000。我的意思是他們應該是我的一些問題,因爲這兩個線程同時在同一個變量上工作。
請糾正我在哪裏錯了。 預先感謝
這就是爲什麼你使用'同步' – QBrute
其實,這本書是不完全正確的。您可以設置天平不同步。只有加和減是。你能告訴我們它是什麼書嗎? – Fildor