我有一个全局变量的类,整数时钟,初始化为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'(实际上,所有的自动装箱类)是不可变的;你不能改变它。 –