가능한 중복 :
I am getting NullPointerException inside ConsumerNullPointerException이
이 프로듀서의 버그로 간주되어, 소비자 시나리오?
이것은 제작자 클래스입니다.
package com ;
import java.util.concurrent.PriorityBlockingQueue;
public class Producer extends CommonClass implements Runnable {
private SyncronizedStack stack;
private int producerNum;
Producer(PriorityBlockingQueue<Character> queue) {
this.queue = queue;
}
public void run() {
char ch;
for (ch = 'a'; ch <= 'f'; ch++) {
queue.add(ch);
System.out.println("Producer" + producerNum + "produced :" + ch);
try {
Thread.sleep((int) (Math.random() * 300));
} catch (InterruptedException e) {
System.out.println("Error");
}
}
}
}
이 내 소비자 클래스입니다
package com ;
import java.util.concurrent.PriorityBlockingQueue;
public class Consumer extends CommonClass implements Runnable {
private int consumerNum;
Consumer(PriorityBlockingQueue<Character> queue) {
this.queue = queue;
}
public void run() {
char c;
for (int i = 0; i < 7; i++) {
try {
c = queue.take();
System.out.println("Consumer" + consumerNum + "consumed:" + c);
} catch (Exception e1) {
e1.printStackTrace();
}
try {
Thread.sleep((int) (Math.random() * 300));
} catch (InterruptedException e) {
System.out.println("Error");
}
}
}
}
이이 내 클라이언트 프로그램입니다
package com ;
import java.util.concurrent.PriorityBlockingQueue;
public class CommonClass {
PriorityBlockingQueue<Character> queue = null;
}
내 CommonClass입니다
난이 실행할 때 451,515,package com ;
import java.util.concurrent.PriorityBlockingQueue;
public class SyncTest {
public static void main(String[] args) {
CommonClass cs = new CommonClass();
PriorityBlockingQueue<Character> queue = new PriorityBlockingQueue<Character>();
Producer p1 = new Producer(queue);
Thread t1 = new Thread(p1);
t1.start();
Consumer c1 = new Consumer(queue);
Thread ct1 = new Thread(c1);
ct1.start();
}
}
는 난이 E 및 F 알파벳의 경우에 출력
Producer0produced :a
Consumer0consumed:a
Producer0produced :b
Consumer0consumed:b
Producer0produced :c
Consumer0consumed:c
Producer0produced :d
Consumer0consumed:d
Producer0produced :e
Producer0produced :f
Consumer0consumed:e
Consumer0consumed:f
으로 얻는다.
이 출력에 문제가 있습니까 ?? 나는 Producer0produced 문장을 동시에 두 번 보았고 Consumer0consumed 문 다음에 e와 f라는 문자를 동시에 출력했다.
이 코드를 사용하면 제작자가 제작 한 정보가 누락 될 수 있습니다.
제발 조언 ??
감사합니다.
같은 코드이지만 질문이 다르다면 어떤 질문은 여러 가지 질문을하지 말고 하나의 실에서 말하면됩니다. – Pawan
여러 스레드가 임의의 순서로 동시에 작업을 수행하도록 설계되었음을 잊지 마십시오. 이 행동을 보는 것은 좋은 일입니다. 시작과 마찬가지로 번갈아 가며 본 것이 있다면 실제로는 여러 스레드가 필요하지 않다고 말합니다. –