2017-10-28 83 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用于此目的。

一个同步协助,允许一组线程彼此等待 达到共同障碍点。在涉及固定大小的线程组的程序中,循环边界是有用的,其中 偶尔等待对方。由于 可以在等待线程释放之后重新使用,因此该屏障被称为循环。