java、易失性静态和同步-threa中出现空异常

java、易失性静态和同步-threa中出现空异常,java,multithreading,volatile,Java,Multithreading,Volatile,我定义了一个要与一些线程共享的公共易失性LinkedList,并在main()中对其进行同步,main()是静态的。。。 因此我得到一个编译错误:“无法引用非静态字段” 如果将定义修改为public volatile static LinkedList,则会出现异常: Exception in thread "filteringThread" java.lang.NullPointerException at com.swimtechtest.swimmerbench.FilteringThr

我定义了一个要与一些线程共享的公共易失性LinkedList,并在main()中对其进行同步,main()是静态的。。。 因此我得到一个编译错误:“无法引用非静态字段”

如果将定义修改为public volatile static LinkedList,则会出现异常:

 Exception in thread "filteringThread" java.lang.NullPointerException
at com.swimtechtest.swimmerbench.FilteringThread.run(FilteringThread.java:39)
 Exception in thread "filteringThread" java.lang.NullPointerException
at com.swimtechtest.swimmerbench.FilteringThread.run(FilteringThread.java:39)
这是我的部分代码

public class SwimmerBench{
    ...
    public volatile LinkedList<InterpolatedEvent> samplings = new LinkedList<InterpolatedEvent>();
    ...
    public static void main(String args[]) throws IOException {
       ...
       InterpolatedEvent event = createInterpolatedEvent(fields);
   synchronized(samplings){
        samplings.add(event);
    samplings.notifyAll();
   }
       ...
    }
}

  ======

public class FilteringThread extends Thread {

    LinkedList<InterpolatedEvent> samplings;
       public void run() {

   System.out.println("Running " +  threadName );

  while(running ) {
      try {
        synchronized(samplings) { // <=  exception error line 39
            InterpolatedEvent event = samplings.getLast();
            samplings.notifyAll();
       }
  }
}
公共类游泳池{
...
public volatile LinkedList samplings=new LinkedList();
...
公共静态void main(字符串args[])引发IOException{
...
InterpolateEvent事件=CreateInterpolateEvent(字段);
同步(采样){
采样。添加(事件);
samplings.notifyAll();
}
...
}
}
======
公共类FilteringThread扩展线程{
LinkedList抽样;
公开募捐{
System.out.println(“Running”+threadName);
(跑步时){
试一试{
同步(采样){//
我定义了一个公共易失性LinkedList,与一些线程共享,
我在main()中同步它,main()是静态的…所以我得到一个
编译错误:“无法引用非静态字段”

它与volatile或synchronization无关,因为您正在静态
main()
方法中访问实例变量
samplings

如果我将定义修改为public volatile static LinkedList, 然后我得到一个例外:

 Exception in thread "filteringThread" java.lang.NullPointerException
at com.swimtechtest.swimmerbench.FilteringThread.run(FilteringThread.java:39)
 Exception in thread "filteringThread" java.lang.NullPointerException
at com.swimtechtest.swimmerbench.FilteringThread.run(FilteringThread.java:39)

这是因为,
FilteringThread
中的实例变量
samplings
从未分配给类型为
List
的对象。默认情况下,它被分配为null

samplings
在线程中必须为null。您在哪里设置它?