私は2つのスレッドを持っています。1つはデータを生成するためのもので、もう1つはデータをサーバーに送信するためのものです。これは古典的な生産者/消費者の状況ですか?これを行うために、同期キューを管理するための簡単なコードを作成しました-私は願っています:私はそれを多かれ少なかれ正しくしましたか?誰かが私に答えてもらえますか?私のコードは以下のとおりです。
public ArrayList<String> Packets;
public synchronized void add_to_Queue (String data) {
Packets.add(data);
}
public synchronized void del_from_Queue (int position) {
Packets.remove(position);
}
public synchronized String read_from_ Queue(int position) {
return Packets.get(position);
}
public synchronized int number_of_element_of_Queue() {
return Packets.size();
}
最初のスレッドは、簡単なコマンドを使用して新しいデータを配置することにより、新しいデータを追加します。
add_to_Queue("XYZ);
2番目はループでデータを送信します:
while (OK)
{
try
{
while (number_of_element_of_Queue()>0)
{
out.write(read_from_Queue(0)+"\n");
out.flush;
del_from_Queue(0); // if no error delete just sent element
}
}
catch (IOException e1)
{
reconnect();
}
}
静的データ(「キュー」から読み取る代わりに単純な静的テキスト)を送信しても再接続(つまり、catch後(IOException e1))が発生しないため、何かが間違っていると思います。しかし、提示されたコードを使用すると、特に再接続後に非常に頻繁に発生します。それは数回行われます(いくつかのデータの送信、再接続、さらにいくつかのデータの送信、再接続など)。