docs: public void startServices(boolean startTLD) {
  		synchronized (this.serviceMonitor) { //multiple threads can call this concurrently 
  			if (this.batchUpdateDaemon == null) {
  	            //----------------------------------------------
  	            // Initialize BatchUpdateDaemon object
  	            //----------------------------------------------
  	            batchUpdateDaemon = new BatchUpdateDaemon(cacheConfig.batchUpdateInterval);
  
  	            //----------------------------------------------
  	            // Initialize InvalidationAuditDaemon object
  	            //----------------------------------------------
  	            invalidationAuditDaemon = new InvalidationAuditDaemon(cacheConfig.timeHoldingInvalidations);
  	            
  	            //----------------------------------------------
  	            // link invalidationAuditDaemon to BatchUpdateDaemon
  	            //----------------------------------------------
  	            batchUpdateDaemon.setInvalidationAuditDaemon(invalidationAuditDaemon);
  	            
  	            if (tc.isDebugEnabled()) {
  	                Tr.debug(tc, "startServices() - starting BatchUpdateDaemon/invalidationAuditDaemon services. " +
  	                		"These services should only start once for all cache instances. Settings are: " + 
  	                		 " batchUpdateInterval=" + cacheConfig.batchUpdateInterval + 
  	                		 " timeHoldingInvalidations=" + cacheConfig.timeHoldingInvalidations);
  	            }
  	            
  	            //----------------------------------------------
  	            // start services
  	            //----------------------------------------------
  	            batchUpdateDaemon.start();
  	            invalidationAuditDaemon.start();
  			}
  			if (startTLD && this.timeLimitDaemon == null) {
  	            //----------------------------------------------
  	            // Initialize TimeLimitDaemon object
  	            //----------------------------------------------
  	            // lruToDiskTriggerTime is set to the default (5 sec) under the following conditions
  	            // (1) less than 1 msec
  	            // (2) larger than timeGranularityInSeconds
  	            int lruToDiskTriggerTime = CacheConfig.DEFAULT_LRU_TO_DISK_TRIGGER_TIME;
  	            if (cacheConfig.lruToDiskTriggerTime > cacheConfig.timeGranularityInSeconds * 1000 ||
  	                cacheConfig.lruToDiskTriggerTime < CacheConfig.MIN_LRU_TO_DISK_TRIGGER_TIME) {
  	                Tr.warning(tc, "DYNA0069W", new Object[] { new Integer(cacheConfig.lruToDiskTriggerTime), 
  	                           "lruToDiskTriggerTime", cacheConfig.cacheName, 
  	                           new Integer(CacheConfig.MIN_LRU_TO_DISK_TRIGGER_TIME),
  	                           new Integer(cacheConfig.timeGranularityInSeconds * 1000), 
  	                           new Integer(CacheConfig.DEFAULT_LRU_TO_DISK_TRIGGER_TIME)});
  	                cacheConfig.lruToDiskTriggerTime = lruToDiskTriggerTime;
  	            } else {
  	                lruToDiskTriggerTime = cacheConfig.lruToDiskTriggerTime;
  	            }
  	            
  	            if (lruToDiskTriggerTime == CacheConfig.DEFAULT_LRU_TO_DISK_TRIGGER_TIME && 
  	            	(cacheConfig.lruToDiskTriggerPercent > CacheConfig.DEFAULT_LRU_TO_DISK_TRIGGER_PERCENT || 
  	            	 cacheConfig.memoryCacheSizeInMB != CacheConfig.DEFAULT_DISABLE_CACHE_SIZE_MB)) {
  	            	lruToDiskTriggerTime = CacheConfig.DEFAULT_LRU_TO_DISK_TRIGGER_TIME_FOR_TRIMCACHE;
  	            	cacheConfig.lruToDiskTriggerTime = lruToDiskTriggerTime;
  	                Tr.audit(tc, "DYNA1069I", new Object[] { new Integer(cacheConfig.lruToDiskTriggerTime)}); 
  	            }
  	            //----------------------------------------------
  	            // Initialize TimeLimitDaemon object
  	            //----------------------------------------------
  	            timeLimitDaemon = new TimeLimitDaemon(cacheConfig.timeGranularityInSeconds, lruToDiskTriggerTime);
  	            
  	            if (tc.isDebugEnabled()) {
  	                Tr.debug(tc, "startServices() - starting TimeLimitDaemon service. " +
  	                		"This service should only start once for all cache instances. Settings are: " + 
  	                		 " timeGranularityInSeconds=" + cacheConfig.timeGranularityInSeconds + 
  	                		 " lruToDiskTriggerTime=" + cacheConfig.lruToDiskTriggerTime);
  	            }
  	            
  	            //----------------------------------------------
  	            // start service
  	            //----------------------------------------------
  	            timeLimitDaemon.start();
  			}
  		}
  	}