【发布时间】:2018-02-22 14:36:43
【问题描述】:
当我在下面运行代码时,生产者 run() 方法启动并将随机数放入作业队列,但消费者 run() 方法从不运行。这里的主要问题是什么?
这里是主类;
public static LinkedBlockingQueue<Integer> jobs = new LinkedBlockingQueue<>();
public static void main(){
MessageProducer producer = new MessageProducer(jobs);
Thread producerThread = new Thread(producer);
producerThread.run();
MessageConsumer consumer = new MessageConsumer(jobs);
Executor executor = Executors.newFixedThreadPool(3);
executor.execute(consumer);
}
制片人;
public class MessageProducer implements Runnable {
public LinkedBlockingQueue<Integer> jobs;
public MessageProducer(LinkedBlockingQueue<Integer> jobs){
this.jobs = jobs;
}
@Override
public void run() {
while(true) {
try {
jobs.put((int) (Math.random() * 10));
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
消费者;
public class MessageConsumer implements Runnable{
public LinkedBlockingQueue<Integer> jobs;
public MessageConsumer(LinkedBlockingQueue<Integer> jobs) {
this.jobs = jobs;
}
@Override
public void run() {
while(true) {
System.out.println("Executing " + jobs.poll());
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
【问题讨论】:
-
尝试 producerThread.start() 而不是 producerThread.run()
-
@yannickott 正是我错过了那个。
标签: java multithreading