gpt4 book ai didi

java - 如何在java线程中正确使用变量?

转载 作者:行者123 更新时间:2023-12-02 06:00:53 26 4
gpt4 key购买 nike

我遇到了一个奇怪的情况,当我尝试在我创建的线程中使用成员变量时,它没有返回正确的值,下面是我的代码片段

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com