2017-10-28 82 views
0

我打電話給一個API來獲取ID列表。該列表包含大約55.000個ID。然後,我希望啓動線程並根據ID獲取有關其對象的信息並將其存儲在數據庫中。我設法使用線程來做到這一點,但想知道如何使用線程池來優化它。我想要做的10個線程,將它們添加到一個線程池,等待它們完成,等待10秒(或我會得到429,太多的請求),然後再開始10個線程,直到所有完成。爲了做到這一點,需要做些什麼?在JAVA中反覆使用線程池

此外,該列表的長度未知,因此它可能不是最後一個池中的10個項目,如果這有所不同。

這是我到目前爲止工作的。 (睡眠不是真正的工作,一會兒429發生後反正)

JSONObject IDs = getIDs(); 

    for (int i = 0; i <= IDs.length(); i++) { 
     try { 
      int ID = IDs.getJSONArray("app").getInt("appid"); 
      // get info on object and store it in database 
      Thread t = new Thread(new MyRunnable(ID)); 
      t.start(); 
      // sleep or 429, too many requests 
      Thread.sleep(1000); 

     } catch (JSONException | InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 
+0

瞭解適用於Java的基本推薦語法。不建議使用「IDs」等變量名稱 –

+0

@KavishMittal我知道,這只是一個例子。 – McSlush

+0

你仍然應該發佈適當和格式良好的問題。 –

回答

0

您可以使用CyclicBarrier用於此目的。

一個同步協助,允許一組線程彼此等待 達到共同障礙點。在涉及固定大小的線程組的程序中,循環邊界是有用的,其中 偶爾等待對方。由於 可以在等待線程釋放之後重新使用,因此該屏障被稱爲循環。