我即将编写我的第一个多线程Java应用程序。任务主要是为一组产品创建销售报告;产品和报告生成器类的输入是完全独立的。
我相信我们可以创建多个线程(我想根据目标机器中的CPU数量控制从属性文件创建的线程数)。使用它们异步生成报告。目前这是我在单线程程序中所做的。
我希望Java大师能给我一些关于设计的意见。提前谢谢。
报告生成器类的结构
public class SalesReportGenerator
{
//Variables
public Report prepareReport(Product prod){
//Implementation
}
//Helper methods used by SalesReportGenerator.prepareReport
}
我想用多线程方法执行的当前实现。
public class ReportCreater
{
public static void main(String args[]){
ListProducts listProd = new ListProducts(); //Getting product list
ArrayList products = listProd.getProductAsArrayList(); //To store list of products
ArrayList reports = new ArrayList(); //To store reports
SalesReportGenerator salesGen = new SalesReportGenerator();
Report tempReport = null;
for (int i;i<products.size() ;i++ )
{
tempReport = salesGen.prepareReport(products.get(i));
reports.add(tempReport);
}
//At this point I will have reports for all the producst
//which I can use for processing, further reporting/saving.
}
}
我想知道首先创建一组线程并让他们选择产品并生成报告的最佳方法是什么。
感谢。
答案 0 :(得分:2)
您需要的是一个创建线程池并在其中分发报告生成任务的类。 Java已经提供了这样一个类。它被称为ExecutorService。您将任务定义为Runnable
并将其传递给ExecutorService
的对象。创建此对象时,应指定线程池的大小。如果任务是CPU密集型的,您可能希望将此大小限制为NumberOfProcessors + 1
。 (有关如何确定NumberOfProcessors
的值),请参阅this example。您可以为此对象提交任意数量的任务,它将管理可用线程如何执行它们。网络上有many tutorials shows you how to use this class。