如何使以下Java类线程安全?
class Test {
int size;
int index;
String[] a;
Test() {
a = new String[10];
size = 10;
}
Test(int b) {
a = new String[b];
size = b;
}
public int getSize() {
return size;
}
public void addElement(String s) {
if (a.length < size) {
a[index] = s;
index++;
} else {
// ...
}
}
public String getElement(int i) {
if (i < index) {
return a[i - 1];
} else {
return 0;
}
}
}
String[] a;
变量volatile
?synchronized
关键字?我的假设是方法synchronized
和getSize()
不需要getElement()
。正确吗?
答案 0 :(得分:2)
要回答您的问题:
易失性是一种数据完整性机制。基本上,您是在告诉编译器变量可能会因在另一个线程中执行的代码而改变,因此它应始终从内存而不是从缓存中获取。
isset($_POST['price'])
是您的最佳选择。对于同步阵列,您需要保护的是写操作,因为它们将修改阵列的内容。此外,如注释中所指出的那样,将0
关键字添加到synchronized
方法将确保它在任何并发synchronized
调用之后都将被执行,因此它将始终使用最新的元素在数组中。 Synchronized Methods上的官方文档有更多详细信息。
getElement