我的业余基准程序

时间:2018-01-01 19:59:59

标签: java 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);
    }

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

2 个答案:

答案 0 :(得分:0)

threads[] array=new threads[cores];

您创建了一个永远不会赋值的threads类型的新数组,因为threads是一个类,数组本身就是一个包含引用的数组。当您致电:

时,参考数组的默认值为null
t.start();

您要在start()值上调用null方法,因此获得NullPointerException。您需要初始化数组,然后在其中分配值并调用这些值的方法。

答案 1 :(得分:0)

你的数组没有元素。 threads t=array[x];当然会为空。

尝试制作一些对象,请将您的课程大写

array[x] = new Threads();
array[x].start();