ArrayList<short[]>
インスタンス変数にアクセスする必要がある 2 つのスレッドがあります。
1 つのスレッドはshort[]
、新しいデータが到着したときに、コールバックを介してアイテムを非同期的にリストに追加します。void dataChanged(short[] theData)
もう一方のスレッドは、リストに項目があるかどうかを定期的にチェックし、項目がある場合はすべての項目を反復処理して処理し、配列から削除します。
2 つのスレッド間の衝突を防ぐためにこれを設定するにはどうすればよいですか?
この不自然なコード例は現在、java.util.ConcurrentModificationException をスローします。
//instance vairbales
private ArrayList<short[]> list = new ArrayList<short[]>();
//asynchronous callback happening on the thread that adds the data to the list
void dataChanged(short[] theData) {
list.add(theData);
}
//thread that iterates over the list and processes the current data it contains
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
while (true) {
for(short[] item : list) {
//process the data
}
//clear the list to discared of data which has been processed.
list.clear();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});