나는 데이터를 저장하고 블루투스를 통해 비동기 적으로 전송하는 arraylist를 보유하고 있습니다.자바 스레드 동시 읽기 및 쓰기
나는 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 Fail 메시지를 받았습니다. 나머지 데이터는 모두 새로 추가 된 AOK Fail 일 것입니다. 그 이유는 무엇입니까
스레딩 문제인 경우 모든 데이터가 전송 된 후에도 문제가 해결되지 않아야합니까?
bufferList와 count는 어떻게 선언됩니까? 그것은 내가 볼 수있는 것에서 마치 그들이 제대로 동기화 된 것처럼 보이지 않습니다 ... –