我在while循环中有一个嵌套赋值,这给了我意想不到的结果.下面的代码在一个将包数据写入文件的线程中运行.通过ConcurrentLinkedQueue从另一个线程接收包.
只要生产者将包放入队列中,此代码就永远不会进入写入部分.
Packet packet = null;
while (!done || (packet = queue.poll()) != null){
if (packet != null){
packet.write(bufferedOutputStream);
}
else{
Thread.sleep(100);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,只要队列中有数据包,此代码就会进入写入部分.这对我来说是预期的行为.
Packet packet = null;
while (!done || packet != null){
packet = queue.poll();
if (packet != null){
packet.write(bufferedOutputStream);
}
else{
Thread.sleep(100);
}
}
Run Code Online (Sandbox Code Playgroud)
有什么我错过了吗?为什么这些代码片段会产生不同的结果?