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

如何在java线程中正确使用变量?,java,multithreading,Java,Multithreading,我遇到了一个奇怪的情况,当我尝试在我创建的线程中使用成员变量时,它没有返回正确的值,下面是我的代码片段 new Thread() { public void run() { while (true) { //System.out.println(printQueue.isEmpty()); while ((currentOrder = printQueue.poll())!= null) {

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

new Thread() {
        public void run() {
            while (true) {
                //System.out.println(printQueue.isEmpty());
                while ((currentOrder = printQueue.poll())!= null) {
                    printall();
                }
            }
        }
    }.start();
printQueue
是我定义的队列,当我尝试将值推入队列时,结果不同。
当我取消对打印行的注释时,此
currentOrder
将返回一个非null变量,但如果我对该行进行注释,
currentOrder
将始终返回null。
它是如何发生的,我应该如何解决它?

LinkedList类不是为多线程应用程序设计的。单个线程可以将
链接列表的状态缓存在其本地内存中,这可能导致状态不一致

您可能应该改用a,看看这是否解决了问题。这可能是因为线程没有看到更新,但写入
系统。out
会导致线程本地内存被刷新

如果您想了解更多关于这里发生的事情,您可能需要参考以下问题:


什么类型的打印队列?它是线程安全的吗?
Queue printQueue=new LinkedList()
并且PrintInfo是我定义的类。