可能重複:
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");
}
}
}
}
這是我CommonClass
package com ;
import java.util.concurrent.PriorityBlockingQueue;
public class CommonClass {
PriorityBlockingQueue<Character> queue = null;
}
這是我的客戶端程序
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();
}
}
當我運行此我得到輸出
Producer0produced :a
Consumer0consumed:a
Producer0produced :b
Consumer0consumed:b
Producer0produced :c
Consumer0consumed:c
Producer0produced :d
Consumer0consumed:d
Producer0produced :e
Producer0produced :f
Consumer0consumed:e
Consumer0consumed:f
這是E和F字母的情況。
是否有這個輸出的任何問題?因爲我看到Producer0同時生成了兩個語句,然後同時跟着Consumer0消息語句爲字母e和f。
我擔心,這個代碼我會想念由生產者產生的任何信息?
請指教?
謝謝意見。
相同的代碼,但問題是不同的,有些人說不要問多個問題,在單線程中,現在你說這個。 – Pawan
不要忘記,多個線程被設計爲以任何順序同時執行任務。看到這種行爲是件好事。如果你只是在開始時看到它交替,它說你並不需要多線程。 –