public default boolean executeInBulk(List<AddressableRowObject> rowObjects,
			List<AddressableRowObject> deleted, TaskMonitor monitor) {
		return false;
	}
A callback that clients can choose to use instead of {@link #execute(AddressableRowObject)}.
<p>
To use this method, simply override it to perform work on each item passed in.  Due to
supporting backward compatibility, clients still have to implement
{@link #execute(AddressableRowObject)}.  When using
{@link #executeInBulk(List, List, TaskMonitor)}, simply implement
{@link #execute(AddressableRowObject)} as a do-nothing method.
<p>
You are responsible for checking the cancelled state of the task monitor by calling
{@link TaskMonitor#isCancelled()}.  This allows long-running operations to be cancelled.  You
should also call {@link TaskMonitor#incrementProgress(long)} as you process each item in
order to show progress in the UI.
<p>
Note: the {@link #execute(AddressableRowObject)} method is only called with items that are
still in the dialog's table model.  Some clients may programmatically manipulate the table
model by removing row objects via the dialog's add/remove methods. The
{@link #execute(AddressableRowObject)} method is only called for items that still exist in
the model.  Contrastingly, this version of execute offers no such protection.  Thus, if you
manipulate the table model yourself, you also need to ensure that any items you process in
this method are still in the dialog.  To see if the item is still in the dialog, call
{@link TableChooserDialog#contains(AddressableRowObject)}.

@param rowObjects the objects to be processed
@param deleted place any items to be removed from the table into this list
@param monitor the task monitor
@return true if you wish to execute items in bulk; always return true from this method if
	       you override it
Ghidra/Features/Base/src/main/java/ghidra/app/tablechooser/TableChooserExecutor.java