The notifier thread is lazily started when the first notifier is added. This avoids the extra thread/processing overhead when notifiers are not used.