2017-10-28 2 views
0

Ich rufe eine API, um eine Liste von IDs zu erhalten. Diese Liste enthält ungefähr 55.000 IDs. Dann möchte ich Threads initiieren und basierend auf der ID Informationen über sein Objekt abrufen und in einer Datenbank speichern. Ich habe es geschafft, dies mit Threads zu tun, würde aber gerne wissen, wie man das mit Threadpools optimieren kann.Wiederholt einen Threadpool in JAVA verwenden

Ich möchte 10 Threads machen, sie zu einem Threadpool hinzufügen, warten, bis sie fertig sind, 10 Sekunden warten (oder 429, zu viele Anfragen) und dann 10 weitere starten, bis alle fertig sind. Was muss getan werden, um dies zu tun?

Auch die Liste ist von unbekannter Länge, so dass es möglicherweise nicht 10 Elemente im letzten Pool sind, wenn dies einen Unterschied macht.

Das ist, was ich bis jetzt gearbeitet habe. (Schlaf nicht wirklich arbeiten, nach einer Weile 429 passiert sowieso)

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

Lernen Sie die empfohlene grundlegende Syntax für Java. Variablennamen wie "IDs" werden nicht empfohlen –

+0

@KavishMittal Ich weiß, das ist nur ein Beispiel. – McSlush

+0

Noch sollten Sie richtige & gut formatierte Fragen posten. –

Antwort

0

können Sie CyclicBarrier für diesen Zweck verwenden.

Eine Synchronisierungshilfe, die eine Gruppe von Threads erlaubt, alle auf zu warten, um einen gemeinsamen Barriere-Punkt zu erreichen. CyclicBarriers sind nützlich in Programmen, die eine feste Größe von Threads, die gelegentlich aufeinander warten müssen beteiligt. Die Barriere wird als zyklisch bezeichnet, da nach dem Loslassen der wartenden Threads wiederverwendet werden kann.