在详细介绍之前,我想说我已经使用线程进行了所有工作。我想使用 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 个文件)吗?