2015-03-22 6 views
-1

Я пытаюсь запустить программу, но она генерирует исключение, которое я не могу исправить.NullPointerException в многопоточном коде Java

public class Multithread extends Thread { 

    static int [][]array1; 
    static int [][]array2; 
    static int [][]array3; 

    static final int i=10; 
    static final int j=10; 
    static final int k=10; 

    volatile int start; 
    volatile int end; 

    Multithread(int start,int end){ 
     this.start=start; 
     this.end=end; 
    } 

    private static void multiplication() { 
     int processors=Runtime.getRuntime().availableProcessors(); 
     int threadcount=processors>=i ? i:processors; 
     Thread [] t=new Thread[threadcount]; 

     int [] idx= new int[threadcount+1]; 

     for(int a=0;a<=threadcount;a++){ 
      idx[a]=(a*i)/threadcount; 
      //System.out.println("idx:"+idx[a]); 
     } 

     for(int a=0;a<threadcount;a++){ 
      t[a]=new Multithread(idx[a],idx[a+1]); 
      //thread 1=start 0 end 9, thread 2 = 9 end =19 
      t[a].start(); 
     } 
    } 

    public static void main(String[] args) { 
     for(int a = 0; a < i; a++) 
      for(int b = 0; b < j; b++) 

       array1[a][b]= (int)(Math.random()*10); 

     for(int a=0;a<j;a++) 
      for(int b=0;b<k;b++) 
       array2[a][b]= (int)(Math.random()*10); 

     long starttime=System.nanoTime(); 
     multiplication(); 
     long endtime=System.nanoTime(); 
     System.out.println("Total time taken is "+((endtime-starttime)/1000)); 
    } 

    public void run(){ 
     for(int a=start;a<end;a++){ 
      for(int b=0;b<k;b++){ 
       for(int c=0;c<j;c++){ 
        array3[a][b]=(array3[a][b]+(array1[a][c]*array2[c][b])); 
       } 
      } 
     } 
    } 
} 

Этот код даст время выполнения матрицы в параллельном программировании. Это дает мне NullPointerException. Я не могу это исправить. он дает исключение для массива 1 [a] [b]. Я попытался разрешить это, но не смог.

ответ

0

Вы не правильно инициализируете свои переменные. Просто инициализируйте свой 2d-массив, чтобы вы могли позже просто передать ссылку.

array1 = blah blah //this is right 
array1[a][b] //you are creating it like this everytime which is wrong. 
Смежные вопросы