IdentityIQ uses the Quartz Scheduler package to manage task scheduling. All Quartz Scheduler (JVM) threads pull task schedule objects from a shared queue for execution. At the time of this writing, IdentityIQ sets the number of scheduler-related threads to 5. The scheduler pool's thread count limits the number of concurrently running scheduled tasks. At startup, the (Quartz) scheduler starts the configured number of worker threads (filling the pool).
To detail the threads operation, browse to the "hidden" debug page "Threads" option. Depending upon the IIQ release, the displayed page lists the JVM threads or (later releases) gives a full stack trace:
To change the quartz threadpool, add the following line to iiq.properties (and restart IdentityIQ):
scheduler.quartzProperties.org.quartz.threadPool.threadCount=10
As a configuration scenario, the "Sequential Task Launcher" task steps thru the task list, queueing a task schedule object at each entry and then waiting for a completion status before moving on to the next task list entry.
If multiple (or nested) "Sequential Task Launcher" tasks run, then the number of tasks waiting for completion could match or exceed the total number of scheduler threads. If so, then the scheduler threads deadlock, waiting forever for a task schedule completion while the task schedule object remain in the queue (awaiting a scheduler thread pickup).