多线程应用程序,即时创建新线程?

时间:2011-07-03 19:06:18

标签: java multithreading concurrency

现在我有一个带有Gui的程序,它为我指定的url编制索引。我需要一次索引15个东西,我只是打开程序的15个窗口并单独输入我想索引的URL。然而,这15个url每小时左右更改一次...我有一个单独的程序,将这15个不断变化的URL存储在我的mysql数据库的表中。我可以从我的数据库中获取这些URL(我将它们存储在arraylist中)但我不知道如何多线程化我的应用程序,这样我就不必进行将url输入到我的应用程序中的手动工作。 / p>

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

我看过java网站的并发性和高级并发性但是并没有真正理解他们给出的例子(我还是一个初学程序员所以请耐心等待我)

希望我解释了我试图用足够的细节做什么 提前致谢

编辑:我索引的网址每隔几秒就会改变一次,这就是为什么我不认为我可以一个接一个地检查每个网址的方法,为什么我认为它需要多线程?

第二次编辑(我相信这些家伙明白我的要求):

@Jon Storm有两个问题:1)获取URL列表2)访问所述URL。我会使URL fetcher单线程,然后发送到一个获取者的线程池。此调度程序还可以对待处理的提取等进行排队 - pst

@Jon Storm:请你更新一下你的问题来描述你想要更明确地做些什么?如果正确理解,您希望反复索引15个URL的列表,因为这些URL的页面内容每3秒更改一次。并且您希望通过从数据库中获取URL来更新每小时索引的URL列表。是对的吗? - JB Nizet

2 个答案:

答案 0 :(得分:2)

在我看来,您的问题不在于多线程,而在于从应用程序从数据库中提取URL的GUI中输入内容。

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

我的猜测是你可以在一个帖子中一个接一个地索引这15个URL。在尝试使用线程之前,我会尝试这样做。

程序看起来像这样:

  1. 从数据库中获取15个URL并将它们放入List
  2. 遍历列表并为每个网址编制索引
  3. 睡了一段时间,
  4. 转到1
  5. 编辑:

    由于看起来URL必须反复索引,直到URL列表发生变化,我才会使用这个算法:

    1. 使用Executors.newCachedThreadPool()
    2. 创建一个线程池
    3. 从数据库中获取网址
    4. 对于每个URL,创建一个将一次又一次索引URL的任务,直到被中断(检查Thread.interrupted()在每次迭代时返回false)
    5. 将每个任务提交给在步骤1中创建的executorService,并将返回的Future保留在列表中
    6. 睡眠/等待直至索引更改的URL列表
    7. 取消Future个实例列表的每个cancel(true)Future
    8. 转到第2步。

答案 1 :(得分:0)

显示SwingWorker

here是一个不错的选择。