gpt4 book ai didi

java - 如何配置ThreadPoolExecutor来限制线程数

转载 作者:行者123 更新时间:2023-12-01 14:18:57 26 4
gpt4 key购买 nike

在详细介绍之前,我想说我已经使用线程完成了所有工作。我想使用ThreadPoolExecutor。我无法理解 ThreadPoolExecutor 在我的案例中是如何工作的。

我有一个 xml 文件。我编写了解析此 xml 文件的代码,当解析器解析预定义的结束元素标记时,我将该元素放入队列中。

我在 startDocument 方法中启动了 4 个监听队列的线程。

public void startDocument()
{
String queueName = getQueueName();
messageSendRecieve = new MessageSendRecieve( queueName );
int maxProcessorThreads = 4;
recieveThread = new RecieveThread[maxProcessorThreads];
for( int i = 0; i < maxProcessorThreads; i++ )
{
recieveThread[i] = new recieveThread ( queueName,new String( "" + ( i + 1 ) ), outputFileName,
jobId );
recieveThread[i].start();
}
}

以及 endElement 方法中

 public void endElement( String namespaceURI, String localName, String qName ) throws SAXException
{

if( PRODUCT.equals( localName ) )
{
totalProducts++;
productXML.append( NODEENDSTARTTAG ).append( localName ).append( NODEEND );
messageSendRecieve.putMessage( productXML.toString() );
}
}

在接收端,我的 4 个线程中的每一个都创建一个新文件,监听队列,进行一些处理,最后将输出写入其中。最后,我的主线程会将所有 4 个输出文件合并为 1 个文件。

我想使用 ThreadPoolExecutor 转换这个进程,我浏览了互联网和我看到的任何地方的示例

executor.execute(new RecieveThread(threadCounter.toString()));

我的问题是 ThreadPoolExecutor 如何适合我的情况?如果我有一个包含 1000 个产品的 xml 文件,ThreadPoolExecutor 会创建 1000 个线程,并且每个线程创建一个输出文件(1000 个文件)吗?

最佳答案

executor.execute(new RecieveThread(threadCounter.toString()));

不,ExecutorService 不是这样的。类(class)工作。您正在提交一个线程,就好像它是 Runnable 。所以你最终得到 Thread实际上不是线程的类。池线程只是调用 RecieveThread.run()方法。

您应该提交您的小RunnableCallable类(class)到 ExecutorService线程池代替。也许是提交给 ExecutorService 的“任务”是 MessageSendRecieve ?从你的代码中很难看出。

比如他是一个简单的小作业类,我拿来做例子:

public class MyJob implements Runnable {
// you can construct your jobs and pass in context for them if necessary
public MyJob(String someContext) {
...
}
public void run() {
// process the small job
}
}

线程由 ExecutorService 启动他们每个人都从内部队列中取出一项作业并调用 run()依次对他们进行处理。

您可能想阅读docs about ExecutorService and friends .

关于java - 如何配置ThreadPoolExecutor来限制线程数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17816536/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com