2010-10-10 37 views
2

我试图让我的头绕着线程,并且在尝试多次让我的头绕过它之后,我被困在这一点上。重用线程

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

试图了解我如何做到这一点后,我认为答案在于发送消息到线程?但我完全被这个困惑。

这里是哪里,我需要得到大量的远程数据的基础上对语句中的变量的例子:

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

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

所以要实现这个,你需要有一些线程间通信技术。这并不是完全无足轻重的写作 - 往往有很多竞争条件需要考虑。显然,App Server供应商在使用这些技术方面看到了优势,但他们正在针对相当高的性能要求。

您大概担心创建和销毁线程的成本。我怀疑你需要关注这种相对于网络调用和解析JSON对象的成本。

Java的Executor framework解决了一些复杂性。恐怕我不知道Android,所以我不知道你是否有这个可用,但如果不是,你可以研究这个框架的实现?