我已经编写了以下代码,但我觉得我在某个地方出错了:
public class ProcessQueue {
static BlockingQueue<String> queue = new LinkedBlockingQueue<String>();
public ProcessQueue() {
process();
}
public void add(String message) throws InterruptedException {
System.out.println("Added Queue size:" + queue.size());
System.out.println("Locked by Producer");
queue.put(message);
System.out.println("Lock Released by Producer");
}
public static void process() {
new Thread() {
@Override
public void run() {
try {
while (true) {
System.out.println("Locked by Consumer");
Message.send(queue.take());
System.out.println("Locked Released by Consumer");
System.out.println("Consuming Queue size:" + queue.size());
}
} catch (Exception ex) {
System.out.print(ex.getMessage());
}
}
}.start();
}
}
这里 add(String) 将字符串添加到队列中。每当它接收到来自 UDP 端口的输入时,就会调用它。process() 处理队列并将其发送给 Message 类进行处理。输出 Locked and Released Print Statements 的顺序不理想。
编辑
我的预期答案应该是:如果它在 Producer 中添加,则由 Producer 锁定 -> 然后添加到队列 -> 锁定释放。同样的方式将在消费者中。但是操作不应该交错,即一旦被生产者锁定打印它不应该打印被消费者锁定然后释放锁。