【发布时间】:2012-04-17 12:42:11
【问题描述】:
我有一个类似于以下的静态类数组:
public class Entry {
private String sharedvariable1= "";
private String sharedvariable2= "";
private int sharedvariable3= -1;
private int mutablevariable1 = -1
private int mutablevariable2 = -2;
public Entry (String sharedvariable1,
String sharedvariable2,
int sharedvariable3) {
this.sharedvariable1 = sharedvariable1;
this.sharedvariable2 = sharedvariable2;
this.sharedvariable3 = sharedvariable 3;
}
public Entry (Entry entry) { //copy constructor.
this (entry.getSharedvariable1,
entry.getSharedvariable2,
entry.getSharedvaraible3);
}
....
/* other methods including getters and setters*/
}
在我的程序中的某个时刻,我访问该对象的一个实例并使用上面的复制构造函数对其进行复制。然后我更改上面两个可变变量的值。该程序在多线程环境中运行。 请注意。在线程化之前,所有变量都设置了它们的初始值。 只有在程序被线程化之后,才会生成一个副本,变量才会被改变。我相信它是线程安全的,因为我只读取静态对象,而不是写入它(即使是共享变量 3,尽管只读取 int 和可变对象)并且我只更改静态对象的副本(以及正在线程中制作副本)。但是,我想在这里确认我的想法是正确的。
有人可以评估我在做什么吗?
【问题讨论】:
-
我会让不可变字段
final明确表示它们不会改变。这也可以提高线程安全性。
标签: java multithreading thread-safety synchronized