ActivityTimeMonitor is now a per-thread object with stop, start and checkForTimeout methods used to change the status of threads from INACTIVE to ACTIVE. The single background monitor thread transitions ACTIVE threads to OVERRUNNING when they reach their expiry deadline.