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()
,我假设这是因为我试图解决方法无法动态命名变量。
任何建议,修复或提示都非常感谢。
答案 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();