我有一个代码,它为特定学生id插入特定学生ID的加载过程。 我有大约500个学生ID,必须经过完全相同的程序。 我想在这里使用多线程,因为我不想为一个学生id加载数据。 如何在此场景中使用多线程或在此场景中使用多线程。 这里我怎么能在多线程中使用这个庞大的代码。在java中使用多线程
回答
这里不要使用多线程。这将需要一个简单的任务,并使其更加复杂。对于500条记录,一次只做一条。如果您确实必须使用JDBC批处理来减少数据库命中次数。
这里有什么问题。因为我有一个多处理器系统,不应该在这里线程帮助。不会运行多个线程将能够并行加载每个学生id,而不是一个接一个,这将节省时间。 – 2012-04-11 04:31:58
其中500名学生,我必须执行加载,每个sudent将有数千记录与一名特定学生相关联。它不是500条记录。 – 2012-04-11 04:40:10
仍然没有区别。数据库可能是多线程的,并且会适当地分配CPU功率。这是数据库擅长的。开放500个连接的成本,即使你可以获得这么多,也会减少任何节省。您问题中的信息相当稀少,您还没有提供任何可能表明多线程处于保证状态的信息。你过分分析并参与过早的优化。尝试单线程,然后适应,如果它真的太慢。 – 2012-04-11 06:12:14
听起来很像“生产者/消费者”模式。它维基百科的文章有一个合理的Java例子,开始从:
http://en.wikipedia.org/wiki/Producer-consumer_problem
,并确保每个线程都有自己的数据库连接(他们通常不是线程安全的)。
如果你真的觉得你需要的并行访问数据库的性能,那么你将需要:
- 要在线程将持有的数量有限制使用
ThreadPool
。 - 每个线程必须保持连接到数据库的
ThreadLocal
。 - 每个线程必须保存一条
ThreadLocal
语句才能执行插入操作。
这并不简单,但它当然可以做到。请确保你确实需要这样做。首先要仔细研究配料,看看这是否有帮助。
如果您有兴趣,我会尽力在稍后发布一些示例代码。
感谢您的答复。请给我发表一些相同的示例代码。并且你的意思是说,数据库的连接对象应该是每个线程的独占,并且数据库语句应该在线程内创建。为什么我应该创建一个线程池。我只是计划在整个工作中有3-4个线程。 – 2012-05-02 09:46:51
@guatam - 你正在寻求大量的代码。很抱歉,我现在没有时间将代码简洁和有价值地整理在一起。 [Here](http://stackoverflow.com/q/9440505/823393)是一个有'ThreadLocal' db连接示例的问题。请阅读那里的评论。 – OldCurmudgeon 2012-05-02 11:22:35
- 1. 如何在同一类中使用多线程Java多线程?
- 2. 在java中使用多线程?
- 3. 在Java中使用多个线程
- 4. 如何在Java中使用多线程
- 5. java - 多个http请求同时在java中使用多线程
- 6. Java多线程中如何使用CountDownLatch?
- 7. 读取使用多线程Java中
- 8. java中有多线程的多线程
- 9. 多线程Java中
- 10. 使用JNI从多线程调用Java,多线程
- 11. 多线程在Java中使用3个一线
- 12. 如何在使用java的多线程中使用log4j?
- 13. Java单线程CPU使用和多线程CPU使用
- 14. 在java中使用多线程在文件中写入值
- 15. 使用信号量在Java中进行多线程编程
- 16. Java线程(多线程)
- 17. Java中的多线程应用程序?
- 18. Java:多线程
- 19. java多线程
- 20. Java多线程
- 21. 多线程|| Java
- 22. java多线程
- 23. 多线程java
- 24. Java多线程
- 25. 在Java程序中实现多线程
- 26. (Java多线程)如何在多线程中传递参数?
- 27. 在STA线程中使用多线程COM对象线程
- 28. 在多线程程序中使用exprtk
- 29. 在多线程程序中使用pthread_mutex
- 30. java编程和java单线程多线程问题(单线程与多线程)
你试过了什么?如果你有一台功能强大的机器和任务的粒度(这些信息是真实的,假设学生规模可以增长),多线程技术将会很有帮助。提示:创建线程池(使用Executors),创建任务并将任务提交到线程池。另外,让数据库批量提交。 – Scorpion 2012-04-11 04:23:44
我还没有使用多线程的程序这个large.That是我问的原因。 – 2012-04-11 04:32:45
“负载”是什么意思?你有数据库吗? – trutheality 2012-04-11 04:33:52