2015-04-07 54 views
-1

這是爲了完成大學作業。我只是想要一些輸入,如果這是正確的軌道或不。該分配要求使用多個線程來添加數組內容。我扣除的是準確的,但我仍然不確定。任何建議或意見都會很棒。 :)多線程數組內容?

我不知道這是否在正確的軌道上,所以我希望有一些專業的批評。

import java.util.*; 

public class threadtest1 extends Thread 
{ 
    int sum, sum2; 
    int N = 5; 

    int [] array = {1,3,2,4,5,6,7,8,9,10}; 
    int [] temp = new int [N]; 

    public static void main (String[] args) 
    { 
     threadtest1 run = new threadtest1(); 
     run.go(); 
    } 

    public void go() 
    { 
     threadtest1 t1 = new threadtest1(); 
     threadtest1 t2 = new threadtest1(); 
     threadtest1 t_Total = new threadtest1(); 


     //To seperate and calculate the array by thread:   


     /**** FOR THREAD 1 ****/ 
     t1.start(); 
     temp = Arrays.copyOfRange(array, 1,5); 
     System.out.println("Temp : " + temp.length); 

     for (int j = 0; j < temp.length; j++) 
      { 
       //sum = temp.get(i); 
       sum += sum + j; 
       System.out.println("T1 : " + sum); 
      } 

     /**** FOR THREAD 2 ****/ 
     t2.start(); 
     temp = Arrays.copyOfRange(array, 6, 10); 

     for (int k = 0; k < temp.length; k++) 
     { 
      //sum = temp.get(i); 
      sum2 += sum2 + k; 
      System.out.println("T2 : " + sum2); 
     } 

     /**** FOR THREAD_TOTAL ****/ 
     t_Total.start(); 
     sum = sum + sum2; 
     System.out.println("T_Total: " + sum); 
    } 

} 
+2

你在做什麼沒有意義。重寫運行方法並在那裏寫出線程特定的代碼。現在所有的代碼只在主線程中運行。 –

+0

變量的任何多線程相關修改應該被synchronized關鍵字包圍。甚至有類比數組確保線程安全。看看併發和可運行的命名空間。 – icbytes

+1

也請按照命名約定'公共類ThreadTest1擴展線程' –

回答

3

不,你根本不在正確的軌道上。當你啓動一個線程時,它的run()方法被執行(在一個單獨的線程中)。默認情況下,run()方法不執行任何操作。而且你還沒有重寫這個方法。所以你要開始兩個什麼都不做的線程,並且正在主線程的數組上執行計算。您需要重新閱讀Java concurrency tutorial