에서 나는 다음과 같은 코드를 작성했지만, 내가 잘못 어딘가에 갈거야 느낌 : 여기생산자 소비자 자바
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();
}
}
추가 (문자열) 큐에 문자열을 추가합니다. UDP 포트에서 입력을 수신 할 때마다 호출됩니다. process()는 큐를 처리하여 처리를 위해 Message 클래스에 보냅니다. 출력물 Locked and Released Print Statements가 원하는 순서대로 아닙니다.
편집
내 예상 답변을해야한다 : 그 다음 프로듀서에 의해 잠겨 추가 할됩니다 프로듀서에 있다면 -> 잠금 해제 ->를 다음 대기열에 추가합니다. 소비자도 마찬가지입니다. 그러나 작업은 인터리브하지 않아야합니다. 즉, 일단 생산자가 잠그면 소비자가 인쇄 한 다음 인쇄물을 잠그지 않아야합니다.
예상 및 실제 주문은 무엇입니까? – mfrankli
원하는 순서와 인쇄 순서는? – Shehzad
@mfrankli 편집자 섹션 –