You could use ExecutorService for Domino Java for running Domino Java agents in the few threads.
There is only one attention:
You know that code will wait until agent.run() or agent.runOnServer() finish. It looks like this methods using thread.wait() for waiting the end of the task. So interrupt() in NotesExecutorService.NotesTask.stopThread() will interrupt not only the NotesTask thread itself but agent.run() also.
If you are using ExecutorService for Domino Java for running agents then you need to run task in the synchronized method to avoid calling .stopThread() [read interrupt()] until it waits agent finishing [read agent.run() done]
Changes under the cut