【发布时间】:2016-05-17 00:08:40
【问题描述】:
一些简化的代码来说明我的问题:
public class QueriesQueueRunnable implements Runnable {
private List<String> queue = new ArrayList<String>();
@Override
public void run() {
while(true){
if (!this.getQueue().isEmpty()) {
System.out.println(this.getQueue().get(0));
this.getQueue().remove(0);
}
}
}
}
QueriesQueueRunnable queriesQueueRunnable = new QueriesQueueRunnable();
Thread thread = new Thread(queriesQueueRunnable).start();
for (int i = 0; i < 1000; i++) {
if(i==500){
try {
Thread.sleep(5000);
} catch(InterruptedException ex) {
Thread.currentThread().interrupt();
}
}
queriesQueueRunnable.getQueue().add(String.valueOf(i));
}
输出仅在 i==499 迭代之前显示。为什么?这就像执行超出了可运行循环。
Java 1.7
【问题讨论】:
-
你等了整整五秒钟吗?是否有任何错误消息,或者它只是挂起?
-
Thread thread = new Thread(queriesQueueRunnable).start();是编译错误。 -
我已经等了五秒钟,是的。没有任何错误。输出在 499 处停止。
标签: java multithreading loops queue runnable