code: public synchronized long stop() {
  		long totalTime = -1;
  
  		if ((todoFlags & RECORD_CPUTIME) != 0 && (currentStartCpuTime != -1)) {
  			long cpuTime = getThreadCpuTime(threadId);
  			if (cpuTime != -1) { // may fail if thread already dead
  				totalTime = cpuTime - currentStartCpuTime;
  				totalCpuTime += totalTime;
  			}
  		}
  
  		if ((todoFlags & RECORD_WALLTIME) != 0 && (currentStartWallTime != -1)) {
  			long wallTime = System.nanoTime();
  			totalWallTime += wallTime - currentStartWallTime;
  		}
  
  		if (isRunning) {
  			measurements += 1;
  			isRunning = false;
  		}
  
  		currentStartWallTime = -1;
  		currentStartCpuTime = -1;
  
  		return totalTime;
  	}
docs: Stop the timer and record the times that have passed since its start. The
  times that have passed are added to the internal state and can be
  retrieved with {@link #getTotalCpuTime()} etc.
  
  If CPU times are recorded, then the method returns the CPU time that has
  passed since the timer was last started; otherwise -1 is returned.
  
  @return CPU time that the timer was running, or -1 if timer not running
  or CPU time unavailable for other reasons