通过线程引用传递整数

时间:2011-11-15 01:31:33

标签: java

我有一个带有全局变量的类,整数时钟,初始化为0.它将'clock'传递给几个线程构造函数,同时启动线程。在线程中可以看到'clock'的增量,但在调用过程中,'clock'始终为0.因为Integer是一个对象而对象是通过引用传递的,所以我希望看到'clock'的变化到处。情况不是这样吗?

2 个答案:

答案 0 :(得分:5)

使用AtomicInteger代替Integer

  

可以原子方式更新的int值。有关原子变量属性的描述,请参阅java.util.concurrent.atomic包规范。 AtomicInteger用于诸如原子递增计数器的应用程序中,不能用作Integer的替代。但是,此类确实扩展Number以允许通过处理基于数字的类的工具和实用程序进行统一访问。

答案 1 :(得分:0)

Integer不可变对象,因此您无法从其他线程更改其值。因为在线程中使用它时必须声明final,所以无法重新分配变量。

解决这个问题的方法是为Integer创建一个可变的包装器

class MutableInteger {
   private int integer;

   synchronized void setInteger(int integer) { ... }
   synchronized int getInteger() { ... }
}