重用一个帖子

时间:2010-10-10 10:40:21

标签: android

我试图绕过线程,经过多次尝试绕过它,我仍然坚持这一点。

我想从服务器获取一些远程数据。我创建了一个线程来处理这个操作。我理解这一点。但是,如果我想获得更多远程数据,我最终会创建一个新线程。这似乎有点愚蠢,因为我不能重新使用现有的线程。

在试图理解我是如何做到这一点后,我认为答案在于向线程发送消息?但我对此感到非常困惑。

以下是我需要根据for语句中的变量获取大量远程数据的示例:

for(int i = 0; i < jsonarray.length(); i++){
   String httpUserId = jsonarray.getJSONObject(i).getString("user_id");
   //Get Sub Comments
   userId = httpUserId
   Thread t = new Thread(null, getUserPrefs, "getUserPrefs");
   t.start();
}

正如您在示例中所看到的,我需要多次调用远程服务器,但不是每次都创建一个新线程,我是否应该能够重用我之前可以创建的一个线程?

如果有人可以提供帮助,我将非常感激:)

2 个答案:

答案 0 :(得分:4)

Android中有ThreadPoolExecutor。可以在此处找到此实例的示例:http://code.google.com/p/shelves/source/browse/trunk/Shelves/src/org/curiouscreature/android/shelves/util/UserTask.java

您可以使用此示例并根据需要进行修改

答案 1 :(得分:2)

应用程序服务器倾向于(重新)使用线程池。这要求逻辑能够在某些控制线程和工作线程之间进行通信。控制器必须跟踪当前可用的线程,能够告诉线程做一些工作并等待每个工作完成。工作线程需要能够找到它必须完成的工作并传达它已经完成的事实。

因此,为了实现这一点,您需要一些线程间通信技术。这一切都不是完全无关紧要的 - 往往需要考虑很多竞争条件。显然,App Server供应商看到了使用这些技术的优势,但他们的目标是相当高的性能要求。

您可能会担心创建和销毁Thread的成本。我怀疑你是否需要关注这与进行网络调用和解析JSON对象的成本有关。

Java有一个Executor framework来解决一些复杂问题。我担心我不知道Android,所以我不知道你是否有这个,但如果没有,你可以研究这个框架的实现吗?