我有一個全局變量的類,整數時鐘,初始化爲0.它傳遞'時鐘'幾個線程構造函數,也啓動線程。看起來線程中可以看到'時鐘'的增量,但在調用過程中,'clock'始終是0.因爲Integer是一個對象,對象是通過引用傳遞的,所以我期望看到'clock'的更改到處。這不是這種情況嗎?通過引用傳遞整數與線程
1
A
回答
5
使用AtomicInteger
,而不是一個Integer
。
可以自動更新的值
int
。有關原子變量屬性的描述,請參閱java.util.concurrent.atomic
包規範。AtomicInteger
用於原子增量計數器等應用程序,不能用作Integer
的替代品。但是,該類不會擴展Number
以允許使用基於數字的類的工具和實用程序進行統一訪問。
+0
另一個我不知道存在的圖書館... –
+1
這不是圖書館。它是Java SE的一部分。 –
0
Integer
是不可變的對象,因此您無法從其他線程更改其值。而且,因爲在線程中使用它時必須聲明final
,所以不能重新分配變量。
解決的辦法是創建一個Integer
包裝,是可變的
class MutableInteger {
private int integer;
synchronized void setInteger(int integer) { ... }
synchronized int getInteger() { ... }
}
相關問題
- 1. 通過引用傳遞TCL - 線程?
- 2. 通過引用線程傳遞對象
- 3. 通過引用傳遞整數
- 4. 通過引用傳遞與值傳遞
- 5. 通過完整引用傳遞變量
- 6. 通過ViewControllers傳遞整數
- 7. RCPP通過引用傳遞與按值
- 8. 通過引用傳遞數組參數
- 9. 通過引用傳遞C++
- 10. C++通過引用傳遞?
- 11. cpp通過引用傳遞
- 12. PHP通過引用傳遞?
- 13. Java通過引用傳遞
- 14. C++通過引用傳遞
- 15. 通過引用傳遞流
- 16. JFrame通過引用傳遞
- 17. 通過引用傳遞LPCWSTR
- 18. Java通過引用傳遞
- 19. 它通過const引用傳遞shared_pointer線程嗎?
- 20. 設置通過引用傳遞的整數的值
- 21. 通過引用C++傳遞的一類整數
- 22. 通過引用傳遞指針數組
- 23. 通過引用傳遞二維數組
- 24. Java數組傳遞通過引用
- 25. 通過引用的CreateInstance傳遞參數
- 26. 通過引用傳遞函數指針
- 27. 通過引用傳遞模板函數
- 28. 通過引用傳遞數組
- 29. 通過引用傳遞的ANT參數
- 30. 參數傳遞通過引用
Java是*通過值* - 特別是*參考值*。除此之外,'Integer'(實際上,所有的自動裝箱類)是不可變的;你不能改變它。 –