作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我遇到了一个奇怪的情况,当我尝试在我创建的线程中使用成员变量时,它没有返回正确的值,下面是我的代码片段
new Thread() {
public void run() {
while (true) {
//System.out.println(printQueue.isEmpty());
while ((currentOrder = printQueue.poll())!= null) {
printall();
}
}
}
}.start();
printQueue
是我定义的队列,当我尝试将值插入队列时,结果是不同的。
当我取消注释打印行时,此 currentOrder
将返回一个非空变量,但如果我注释该行,currentOrder
将始终返回 null。 这是如何发生的以及我应该采取什么措施来解决它?
最佳答案
LinkedList
类并非设计用于多线程应用程序。各个线程可以将 LinkedList
的状态缓存在其本地内存中,这可能会导致状态出现不一致。
您可能应该使用 java.util.concurrent.BlockingQueue
相反,看看是否能解决问题。这可能是线程看不到更新的问题,但写入 System.out 会导致线程本地内存被刷新。
如果您想更多地了解这里发生的事情,您可能需要引用这个问题:
What does flushing thread local memory to global memory mean?
关于java - 如何在java线程中正确使用变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22679726/
我是一名优秀的程序员,十分优秀!