2012-04-11 51 views
0

我有一个代码,它为特定学生id插入特定学生ID的加载过程。 我有大约500个学生ID,必须经过完全相同的程序。 我想在这里使用多线程,因为我不想为一个学生id加载数据。 如何在此场景中使用多线程或在此场景中使用多线程。 这里我怎么能在多线程中使用这个庞大的代码。在java中使用多线程

+0

你试过了什么?如果你有一台功能强大的机器和任务的粒度(这些信息是真实的,假设学生规模可​​以增长),多线程技术将会很有帮助。提示:创建线程池(使用Executors),创建任务并将任务提交到线程池。另外,让数据库批量提交。 – Scorpion 2012-04-11 04:23:44

+0

我还没有使用多线程的程序这个large.That是我问的原因。 – 2012-04-11 04:32:45

+0

“负载”是什么意思?你有数据库吗? – trutheality 2012-04-11 04:33:52

回答

4

这里不要使用多线程。这将需要一个简单的任务,并使其更加复杂。对于500条记录,一次只做一条。如果您确实必须使用JDBC批处理来减少数据库命中次数。

+0

这里有什么问题。因为我有一个多处理器系统,不应该在这里线程帮助。不会运行多个线程将能够并行加载每个学生id,而不是一个接一个,这将节省时间。 – 2012-04-11 04:31:58

+0

其中500名学生,我必须执行加载,每个sudent将有数千记录与一名特定学生相关联。它不是500条记录。 – 2012-04-11 04:40:10

+1

仍然没有区别。数据库可能是多线程的,并且会适当地分配CPU功率。这是数据库擅长的。开放500个连接的成本,即使你可以获得这么多,也会减少任何节省。您问题中的信息相当稀少,您还没有提供任何可能表明多线程处于保证状态的信息。你过分分析并参与过早的优化。尝试单线程,然后适应,如果它真的太慢。 – 2012-04-11 06:12:14

0

如果你真的觉得你需要的并行访问数据库的性能,那么你将需要:

  • 要在线程将持有的数量有限制使用ThreadPool
  • 每个线程必须保持连接到数据库的ThreadLocal
  • 每个线程必须保存一条ThreadLocal语句才能执行插入操作。

这并不简单,但它当然可以做到。请确保你确实需要这样做。首先要仔细研究配料,看看这是否有帮助。

如果您有兴趣,我会尽力在稍后发布一些示例代码。

+0

感谢您的答复。请给我发表一些相同的示例代码。并且你的意思是说,数据库的连接对象应该是每个线程的独占,并且数据库语句应该在线程内创建。为什么我应该创建一个线程池。我只是计划在整个工作中有3-4个线程。 – 2012-05-02 09:46:51

+0

@guatam - 你正在寻求大量的代码。很抱歉,我现在没有时间将代码简洁和有价值地整理在一起。 [Here](http://stackoverflow.com/q/9440505/823393)是一个有'ThreadLocal' db连接示例的问题。请阅读那里的评论。 – OldCurmudgeon 2012-05-02 11:22:35