我有一個arraylist存儲我收到的數據,並通過藍牙異步傳輸。Java線程併發讀取和寫入
我有一個寫線程和讀線程訪問該ArrayList。我試圖模擬藍牙回聲(藍牙是爲了迴應我發送的所有內容)。
private class ReadThread extends Thread {
@Override
public void run() {
super.run();
while(!isInterrupted()) {
try {
byte[] buffer = new byte[64];
if (mInputStream == null) return;
size = mInputStream.read(buffer);
if (size == 64) {
if (bufferList.isEmpty()){
Log.i("AOK Fail","Nothing to AOK");
}
if (compareByte(buffer,bufferList.get(0) == true) // Compare data in this 2 byte array
bufferList.remove(0);
}
} catch (IOException e) {
e.printStackTrace();
return;
}
}
}
}
private class WriteThread extends Thread {
@Override
public void run() {
super.run();
while(!isInterrupted()) {
try {
count++;
if (bufferList.isEmpty() == false && count < 3){
write(bufferList.get(0));
count = 0;
}else{
// Drop data after 3 fail attempt
bufferList.remove(0);
count=0;
}
Thread.sleep(500);
} catch (IOException e) {
e.printStackTrace();
return;
}
}
}
}
按下按鈕我會發送數據。如果我傳輸緩慢,它工作正常。但是,當我開始快速點擊時(排隊傳輸數據)失敗。一旦我收到AOK失敗消息。即使是新增加數據,所有剩餘的數據也將全部爲AOK失敗。爲什麼會這樣
如果它是一個線程問題應該不是所有的數據後解決傳輸?
如何bufferList和計數申報?從我所能看到的看來,它看起來並沒有看起來好像它們已經正確同步...... –