Java 我的业余基准测试程序上的NullPointerException

Java 我的业余基准测试程序上的NullPointerException,java,nullpointerexception,Java,Nullpointerexception,上面的代码是我在一个简单的基准测试程序中的尝试,该程序试图利用计算机CPU上的所有可用内核,只需使用5秒钟内可能计数的所有线程。 代码在t.start行上给出了一个NullPointerException,我认为这是因为我试图解决无法动态命名变量的问题。 非常感谢您的任何建议、修复或提示 import java.io.*; class threads extends Thread{ int counter=0; static volatile boolean counting=t

上面的代码是我在一个简单的基准测试程序中的尝试,该程序试图利用计算机CPU上的所有可用内核,只需使用5秒钟内可能计数的所有线程。 代码在t.start行上给出了一个NullPointerException,我认为这是因为我试图解决无法动态命名变量的问题。 非常感谢您的任何建议、修复或提示

import java.io.*;
class threads extends Thread{
    int counter=0;
    static volatile boolean counting=true;
    public void run(){
        if(counting) {
            counter++;
        }
    }
}
public class cores {
    static PrintWriter pw= new PrintWriter(System.out, true);
    @SuppressWarnings({ "static-access", "deprecation" })
    public static void main(String args[]) throws InterruptedException {
        int mastercounter=0;
        Thread mainthread=Thread.currentThread();
        int cores= Runtime.getRuntime().availableProcessors();      
        threads[] array=new threads[cores];
        for (int x=0;x<cores;x++) {
            threads t=array[x];
            t.start();
        }
        mainthread.sleep(5000);
        threads.counting=false;
        for (int x=0;x<cores;x++) {
            threads t=array[x];
            t.stop();
            mastercounter+=t.counter;
        }
        pw.println(mastercounter);
    }
创建类型为threads的新数组时,该数组从不赋值,因为threads是一个类,数组本身是一个保存引用的数组。调用时,引用数组的默认值为null:

threads[] array=new threads[cores];

您正在对null值调用start方法,因此会得到NullPointerException。在分配数组中的值并对这些值调用方法之前,您需要初始化数组。

您的数组没有元素。线程t=数组[x];当然是空的

尝试制作一些对象,并请将您的类大写

t.start();

@悬停应该是如何初始化objects@cricket_007当前位置我会让SOCVR在几分钟后结束这个问题days@HovercraftFullOfEels哦米奥尼尔!米奥尼尔!那么,这不只是另一个NPE吗?你不认为这是复制品?米奥尼尔!米奥尼尔!语无伦次是人类的。@NoiseGenerator:这正好说明了我的观点。。请注意,用于结束此问题的NPE Q/A不是通常的NPE问题,而是一个更特定于NPE和参考数组的问题。如果可能,最好用更具体的副本来结束。@HovercraftFullOfEels NPE是NPE。这是我的观点。越通用越好。因为你将学会处理更广泛的问题
array[x] = new Threads();
array[x].start();