2011-07-03 48 views
1

现在我有一个Gui的程序,它可以索引我指定的url。我一次需要索引15个东西,而我一直打开该程序的15个窗口并单独输入我想索引的url。然而,这些15个网址每个小时左右都在变化......我有一个单独的程序,它将这15个不断变化的URL存储在我的mysql数据库的表中。我能够从我的数据库中获取这些网址(我将它们存储在一个数组列表中),但我不知道如何去关于多线程应用程序,这样我就不必手动输入网址到我的应用程序中了。多线程应用程序,即时创建新线程?

我的问题:有人可以给我一个例子/链接我的教程,我将如何去创建一个新的线程为我的arraylist中的每个url(也这个arraylist会改变,所以我需要做一个新的线程改变此ArrayList藏汉?)

伊夫看了看并发和高层次的并发java的网站,但并没有真正理解他们给的例子(我仍然是一个开始程序员,所以请原谅)

希望我解释了什么即时通讯试图做足够的细节 在此先感谢

编辑:我的指数改变了每两秒钟这就是为什么我不认为我可以通过我的方法与每个url一个接一个,因此为什么我认为它需要多线程?

第二EDIT(我相信这些人明白IM叫什么):

@乔恩风暴有持续1两个问题)获取URL列表2)访问说的网址。我会让URL fetcher单线程,然后派发到fetchers线程池。这个调度员还可以排队等待提取等。 - pst

@Jon Storm:你能否更新你的问题来描述你想更明确地做什么?如果In理解正确,则您希望一次又一次地为15个URL列表编制索引,因为这些URL的页面内容每3秒更改一次。并且您想要更新URL列表以便每小时索引,方法是从数据库中获取它们。是对的吗? - JB Nizet

回答

2

在我看来,你的问题不是多线程,而是从应用程序中从GUI中输入一些东西,从应用程序中获取数据库中的URL。

为什么不简单地重复使用GUI应用程序中的类(或一些代码,如果不可能重用这些类的话)(即URL索引方法),该应用程序从应用程序中获取URL数据库。

我的猜测是,你可以很好地将这15个URL一个接一个地编入索引。在尝试使用线程之前,我会尝试这样做。

程序是这样的:

  1. 从数据库读取的15个网址,并把它们放在一个列表
  2. 迭代通过列表和索引每个URL
  3. 休眠一段时间,
  4. 转到1

编辑:

因为它似乎在URL必须一次又一次地索引到的网址的更改名单,我会用这个算法:

  1. 创建使用Executors.newCachedThreadPool()
  2. 从数据库中获取的URL线程池
  3. 对于每个URL,创建一个将重复索引URL的任务,直到中断为止(检查Thread.interrupted()在每次迭代时返回false)
  4. 将每个任务提交给在步骤1创建的executorService,并将返回的Future保留在列表中
  5. 睡眠/等到网址索引列表改变Future实例
  6. 围棋的列表中的每个Futurecancel(true)
  7. 取消步骤2
+0

对不起,我忘了提及的重要组成部分我在做什么...我每隔几秒钟都会索引这些url,这就是为什么我相信我需要多线程才能索引它,否则信息可能会在页面上发生变化,而im索引另一个,我需要索引站点每次它改变 除非 - 你认为我可以在3秒内索引15个网站?如果是这样,我可以做你的建议,但我不相信我会这样做,这将是可能的 –

+0

@Jon Storm有两个问题正在进行1)获取URL列表2)访问所述URL。我会让URL fetcher单线程,然后派发到fetchers线程池。这个调度员也可以排队等待提取等。 – 2011-07-03 19:29:44

+0

@Jon Storm:你能不能更新你的问题来描述你想更明确地做什么?如果In理解正确,则您希望一次又一次地为15个URL列表编制索引,因为这些URL的页面内容每3秒更改一次。并且您想要更新URL列表以便每小时索引,方法是从数据库中获取它们。是对的吗? –