2つのスレッドがあり、1つはデータを挿入し、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を呼び出し、別のスレッドがgetの途中にある場合、またはその逆の場合、div演算子を使用して髪の毛の数学の途中で、悪いことが起こる可能性があります。 – user949300