我有两个线程。一个用于生成数据,第二个用于将它们发送到服务器。这是典型的生产者-消费者情况吗?为此,我构建了用于管理同步队列的简单代码 - 我希望:我做的或多或少是正确的?请问有人可以回答我吗?我的代码在下面:
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);
第二个循环发送数据:
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) 之后)。但是当我使用提供的代码时,它经常发生,尤其是在重新连接之后。它做了几次(发送一些数据,重新连接,发送更多数据,再次重新连接等等)。