Package com.saxonica.ee.parallel
Class MultithreadedItemMappingIterator
- java.lang.Object
-
- net.sf.saxon.expr.ItemMappingIterator
-
- com.saxonica.ee.parallel.MultithreadedItemMappingIterator
-
- All Implemented Interfaces:
java.io.Closeable
,java.lang.AutoCloseable
,LastPositionFinder
,SequenceIterator
,LookaheadIterator
public class MultithreadedItemMappingIterator extends ItemMappingIterator
Parallel-processing version of the ItemMappingIterator class, which executes a mapping function for each item in a sequence. In this implementation (which is designed initially for use by the collection() function), the order of items in the result sequence retains the order of items in the input sequence.
-
-
Constructor Summary
Constructors Constructor Description MultithreadedItemMappingIterator(SequenceIterator base, ItemMappingFunction action, MultithreadingFactory factory)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
close()
The user of aSequenceIterator
is encouraged to call theclose()
method if no further items are required from the sequence of items delivered by theSequenceIterator
.void
discharge()
Calling this method instructs the iterator to release any resources it holds, while still remaining able to deliver the remaining items in the sequence.protected int
getMaxThreads()
Overridable method that decides how many threads to use.Item
next()
Get the next item in the sequence.-
Methods inherited from class net.sf.saxon.expr.ItemMappingIterator
filter, getBaseIterator, getLength, getMappingFunction, hasNext, isOneToOne, map, setOneToOne, supportsGetLength, supportsHasNext
-
-
-
-
Constructor Detail
-
MultithreadedItemMappingIterator
public MultithreadedItemMappingIterator(SequenceIterator base, ItemMappingFunction action, MultithreadingFactory factory) throws XPathException
- Throws:
XPathException
-
-
Method Detail
-
getMaxThreads
protected int getMaxThreads()
Overridable method that decides how many threads to use. The default implementation returns the value ofRuntime.getRuntime().availableProcessors()
, or 1 if greater.- Returns:
- the maximum number of threads to use.
-
next
public Item next()
Description copied from interface:SequenceIterator
Get the next item in the sequence. This method changes the state of the iterator.- Specified by:
next
in interfaceSequenceIterator
- Overrides:
next
in classItemMappingIterator
- Returns:
- the next item, or null if there are no more items. Once a call on next() has returned null, no further calls should be made. The preferred action for an iterator if subsequent calls on next() are made is to return null again, and all implementations within Saxon follow this rule.
-
close
public void close()
The user of aSequenceIterator
is encouraged to call theclose()
method if no further items are required from the sequence of items delivered by theSequenceIterator
. This allows resources to be released. ASequenceIterator
is NOT normally closed explicitly if it has been read to completion. This implementation of theclose()
method shuts down theExecutorService
used to schedule threads.- Specified by:
close
in interfacejava.lang.AutoCloseable
- Specified by:
close
in interfacejava.io.Closeable
- Specified by:
close
in interfaceSequenceIterator
- Overrides:
close
in classItemMappingIterator
-
discharge
public void discharge()
Description copied from interface:SequenceIterator
Calling this method instructs the iterator to release any resources it holds, while still remaining able to deliver the remaining items in the sequence. This may require the iterator to calculate the rest of the sequence eagerly. The method is called by a client if it anticipates that it might not read the iterator to completion, but it cannot guarantee thatSequenceIterator.close()
will be called when no more items are needed.- Specified by:
discharge
in interfaceSequenceIterator
- Overrides:
discharge
in classItemMappingIterator
-
-