【发布时间】:2018-11-07 09:46:05
【问题描述】:
我在 while 循环中有一个嵌套赋值,这给了我意想不到的结果。 下面的代码在将包数据写入文件的线程中运行。包是通过 ConcurrentLinkedQueue 从另一个线程接收的。
只要生产者将包放入队列,此代码就不会进入写入部分。
Packet packet = null;
while (!done || (packet = queue.poll()) != null){
if (packet != null){
packet.write(bufferedOutputStream);
}
else{
Thread.sleep(100);
}
}
但是,只要队列中有数据包,此代码就会进入写入部分。这对我来说是预期的行为。
Packet packet = null;
while (!done || packet != null){
packet = queue.poll();
if (packet != null){
packet.write(bufferedOutputStream);
}
else{
Thread.sleep(100);
}
}
我有什么遗漏的吗?为什么这些代码 sn-ps 会产生不同的结果?
【问题讨论】:
-
这怎么会被视为重复问题?