多线程对java程序中特定场景的适用性

时间:2012-01-27 07:59:00

标签: java multithreading

我对多线程的适用性感到困惑......

我正在创建一个应用程序,它执行一些以xml格式保存的代码。工作是使用apache http客户端并从网站检索一些数据... xml中的一个代码块可以访问超过1个网站...

现在我希望如果2个用户创建了各自的代码并将它们保存为XML,那么每个用户的“作业”(即xml格式的代码块)都在一个单独的线程中运行。

我有代码执行一个用户的代码......现在我想要多个人的代码可以并行运行。但我有些疑惑 -

(1)Apache HTTP客户端提供了一种多线程通信方式,目前我只是使用默认的HTTP客户端 - 可以使这个客户端一个接一个地访问多个网站 - 按照xml中的代码块。我是否认为我不需要更改我的代码以便它使用推荐的多线程通信?

(2)我正在考虑创建一个servlet,在调用时,执行一个xml代码块。因此,要执行2个不同用户给出的2个代码块,我将不得不两次调用此servlet。我将使用Amazon Elastic Beanstalk部署此应用程序,所以我很困惑的是,我是否需要在我的程序中使用多线程?我不能简单地从servlet调用现有代码(用于一次执行一个代码块)吗?我确实希望将不同的XML代码块的处理彼此分开,所以我不认为我应该在这里使用多线程。我的假设是否正确?

2 个答案:

答案 0 :(得分:1)

由于您打算使用servlet容器,因此它将为您管理多线程。每个servlet请求都将在不同的线程中执行。在那种情况下,一个servlet调用将以单线程方式从提供的XML上的代码块上执行。如果每个代码块声明了多个站点,则会以串行方式访问它们。其他用户同时可以使用与第一个并行运行的其他代码块调用同一服务器。

答案 1 :(得分:1)

根据您的第一个选项一个接一个地运行它将不被视为“并发”。

使用servlet方法,您描述它的方式将同时工作,但您还需要同时考虑多少用户?因为对于每个用户,将存在单独的请求,所以多个呼叫将涉及一些网络延迟。在继续使用此选项之前,您需要考虑所有这些因素

由于您拥有一个用户作业的代码,因此您可以定义一个将userid作为属性的线程类。在run()方法中,调用特定用户作业的代码。

现在创建两个线程并为每个线程设置适当的用户ID并将其生成。

如果用户数量更多,您可以查看使用Java的线程池执行程序。