2017-10-28 15 views
0

IDのリストを取得するためにAPIを呼び出しています。このリストには約55,000のIDが含まれています。スレッドを開始し、そのIDに基づいてオブジェクトに関する情報を取得し、データベースに格納したいと考えています。私はスレッドを使用してこれを行うことができましたが、スレッドプールを使用してこれを最適化する方法を知りたいと思います。Javaでスレッドプールを繰り返し使用

私が望むのは、10スレッドをスレッドプールに追加し、10秒間待ってから(または429リクエストが多すぎる)、すべてが完了するまで10回以上開始することです。これを行うために何をする必要がありますか?

また、リストの長さが不明なため、最後のプールでは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についても適切な基本的な推奨構文を学んでください。 "ID"のような変数名はお勧めできません –

+0

@ KavishMittal私は知っています、これは一例です。 – McSlush

+0

まだ正式な形式の質問を投稿するべきです。 –

答えて

0

をあなたは、この目的のためにCyclicBarrierを使用することができます。

スレッドのセットがすべて が互いに共通のバリアポイントに達するまで待つことを可能にする同期補助機能。 CyclicBarriersは、固定サイズのスレッドスレッドを含むプログラムでは が便利です。 は時々お互いを待つ必要があります。このバリアは、待ちスレッドが解放された後に再利用できるので、循環と呼ばれます。

関連する問題