【发布时间】:2011-02-06 09:51:23
【问题描述】:
我正在为我的 Java 并发课程编写教程。目标是使用线程池并行计算素数。
该设计基于埃拉托色尼筛法。它有一个包含 n 个布尔值的数组,其中 n 是您要检查的最大整数,数组中的每个元素代表一个整数。 True 为素数,false 为非素数,数组初始全部为真。
线程池使用固定数量的线程(我们应该试验池中的线程数量并观察性能)。
一个线程被赋予一个整数倍来处理。然后线程在数组中找到第一个不是线程整数倍数的真正元素。然后该线程在线程池上创建一个新线程,并给定找到的编号。
形成新线程后,现有线程继续将数组中其整数的所有倍数设置为false。
主程序线程以整数“2”启动第一个线程,然后等待所有派生线程完成。然后它会吐出素数和计算时间。
我遇到的问题是线程池中的线程越多,速度越慢,1 个线程最快。它应该变得更快而不是更慢!
互联网上所有关于 Java 线程池的东西都会创建 n 个工作线程作为主线程,然后等待所有线程完成。我使用的方法是递归的,因为一个工作线程可以产生更多的工作线程。
我想知道出了什么问题,以及是否可以递归使用 Java 线程池。
【问题讨论】:
-
继续使用线程方法,这是一种学习体验,完成后您将了解很多有关线程的知识。谁在乎埃拉托色尼筛?很多专业程序员永远不懂这个页面上的知识。请记住,如果一个女人9个月可以生孩子,并不意味着9个可以在1个月内完成!!!
标签: java concurrency multithreading threadpool