我有2个线程,一个插入数据,第二个线程检索数据。
我得到了很奇怪的结果。线程安全循环缓冲区?
线程安全吗?
如果没有,如何解决?
这是我的循环缓冲区:
private int mBufferSize;
private int startPointer = 0;
private int endPointer = 0;
private int bufferSize = 0;
private String[] buffer;
public BBuffer(int size) {
mBufferSize = size;
startPointer = 0;
endPointer = 0;
bufferSize = 0;
buffer = new String[mBufferSize];
}
public String[] getData() {
String data = null;
if (!isEmpty()) {
bufferSize--;
startPointer = (startPointer + 1) % mBufferSize;
data = (String) buffer[startPointer];
} else {
System.err.println("!");
return null;
}
return data.split(",");
}
public void addData(String data) {
if (!isFull()) {
bufferSize++;
endPointer = (endPointer + 1) % mBufferSize;
buffer[endPointer] = data;
System.out.println("->"+data);
} else {
System.out.println("full");
}
}
public boolean isEmpty() {
return bufferSize == 0;
}
public boolean isFull() {
return bufferSize == mBufferSize;
}
}
这是一个家庭作业?如果是这样,你可以用'家庭作业'来标记吗? – melihcelik
我怀疑应该同步addData和getData。如果一个线程调用add,而另一个线程调用add,或者相反,也就是说,在div运算符的毛病数学中,可能会发生不好的事情。 – user949300