你好,我正在嘗試使用雙重對象,而不是類型爲了同步線程。這是一項家庭作業。元素沒有附加源代碼Java.Lang
概述:此應用程序是銀行系統的一個簡單示例,它具有作爲存儲程序運行的線程和作爲提取程序運行的線程。存款人增加10美元,提款人刪除10美元,因此申請結束時應該有10個不變的銀行賬戶。
在每個類(存款人和提款人)中,我能夠使用帳戶對象上的塊同步來實現目標。所以我作業的作業部分已經完成了,我不需要幫助。
我想到了,我覺得鎖定整個帳戶對象是矯枉過正。由於交易中唯一真正關鍵的部分是變更變量
balance
最初的可變餘額是雙倍。我的目標是將變量更改爲Double對象,然後將同步塊移到帳戶對象的內部,並且僅在修改平衡變量的代碼部分周圍。
當我改變了代碼,雙,沒有錯誤,但我得到一張紙條:
This element has no attached source and the Javadoc could not be found in the attached Javadoc
此外,代碼不工作作爲自己的價值觀來表達錯了底。
問題:
- 是我的理論是正確的,我應該能夠鎖定僅平衡變量?
- 我該如何讓我的代碼識別Double.Java.lang代碼?
感謝
下面是一些代碼...
聲明:
private Double balance;
構造:
this.balance = new Double(balance);
鎖定:
synchronized(balance){
balance = balance + amount;
}
向我們展示一些代碼。 –
在第二個問題中應該有「java.lang」而不是「Java.lang」(包名中我們只使用小寫字母)。 – Pshemo
確實有時,鎖定整個對象是過度殺傷力,對性能不利。但另一方面,將呼叫鎖定在關鍵資源上有時還不夠。一些行爲必須「原子地」完成,因此必須作爲一個塊被鎖定。通常情況下,「讀寫改變」塊就是這個選擇。在您更改了資源並且尚未寫回資源之後,您不會希望另一個線程更改資源。 – Fildor