java、易失性静态和同步-threa中出现空异常
我定义了一个要与一些线程共享的公共易失性LinkedList,并在main()中对其进行同步,main()是静态的。。。 因此我得到一个编译错误:“无法引用非静态字段” 如果将定义修改为public volatile static LinkedList,则会出现异常: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
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
的对象。默认情况下,它被分配为nullsamplings
在线程中必须为null。您在哪里设置它?