【问题标题】:Multi threaded programs in JavaJava中的多线程程序
【发布时间】:2023-04-01 07:43:01
【问题描述】:

我即将编写我的第一个多线程 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.
    }
}

我想知道首先创建一组线程并让他们选择产品并生成报告的最佳方法是什么。

谢谢。

【问题讨论】:

    标签: java multithreading


    【解决方案1】:

    您需要的是一个创建线程池并在它们之间分配报告生成任务的类。 Java 已经提供了这样一个类。它被称为ExecutorService。您将任务定义为Runnable,并将其传递给ExecutorService 的对象。创建此对象时,应指定线程池的大小。如果任务是 CPU 密集型的,您可能希望将此大小限制为 NumberOfProcessors + 1。 (有关如何确定NumberOfProcessors 的值,请参阅this example)。您可以向该对象提交任意数量的任务,它将管理可用线程如何执行它们。网上有many tutorialsshows you how to use this class

    【讨论】:

    • 非常感谢维杰。我马上试试看。
    猜你喜欢
    • 1970-01-01
    • 2017-12-27
    • 2012-05-29
    • 2020-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多