2017-08-30 49 views
-4

我有一個java中的線程數組,長度爲24. 我想運行它們,但如果我運行了兩個以上的計算機,我的計算機將被關閉。 我該如何在任何時刻只運行其中的兩個? 這是我寫的,但它不工作(運行此代碼我的電腦關機後):如果運行該代碼關閉計算機在java中的多線程與確切的線程數

File[] files = file.listFiles(); 
    Thread[] threads = new Thread[files.length]; 


    for (int i = 0; i < files.length; i++) { 
      File a = files[i]; 
      threads[i] = new Thread(new Runnable() { 
       @Override 
       public void run() { 
        Function(a.toString()); 
       } 
      }); 
    } 

    Thread a = null,b = null; 
    int i = 0; 
    while (i < files.length) { 
     if (!a.isAlive()) { 
      a = threads[i]; 
      a.start(); 
      i++; 
     } 
     if (!b.isAlive()) { 
      b = threads[i]; 
      b.start(); 
      i++; 
     } 
    } 
+2

當您嘗試運行3個線程時,您的計算機將關閉?這很奇怪...... – shmosel

+1

看起來它會在NPE開始第一個線程之前崩潰。 – tkausl

+0

電腦關機?你確定? –

回答

1

,那麼你的電腦壞了。

它甚至不是線程,因爲您的代碼在第一次到達if (!a.isAlive()) {時會引發NullPointerException,因爲此時a爲空。

無論您編寫的代碼有多糟糕,Java虛擬機都無法關閉您的PC。在最糟糕的情況下,JVM會崩潰或Windows會關閉,但完全關機清楚地表明您的硬件有錯誤。