我正在使用 ArrayDeque 实现生产者和消费者模式并遇到一个奇怪的问题。
Consumer.java
Class Consumer {
public final Queue<Msg> my_queue = new ArrayDeque<Msg>();
public void begin() {
new Thread() {
new Runnable() {
public void run() {
while(true) {
while(my_queue.isEmpty()) {
// do nothing
}
Msg msg = my_queue.remove();
msg.doSomething();
}
}
}
}.start();
}
}
由于 my_queue 是公开的,我可能有 > 1 个线程执行 my_queue.add(msg)。然而,奇怪的发生是因为 doSomething 在生产中运行时从未被调用。但是,当我处于调试模式并使用断点时,将调用 doSomething()!谁能解释一下?