docs: public <Value> PushMeasure<Value> createPushFromPull(
  			PullMeasure<Value> pull, final long period) {
  		SimplePushMeasure<Value> push = new SimplePushMeasure<>(pull.getName(),
  				pull.getDescription());
  		final WeakReference<PullMeasure<Value>> weakPull = new WeakReference<PullMeasure<Value>>(
  				pull);
  		final WeakReference<SimplePushMeasure<Value>> weakPush = new WeakReference<SimplePushMeasure<Value>>(
  				push);
  		final Value initialValue = pull.get();
  		/*
  		 * TODO Use a static thread to run the checks of all the measures
  		 * created that way. Using a WeakHashMap could probably do the trick.
  		 */
  		Thread thread = new Thread(new Runnable() {
  			private Value lastValue = initialValue;
  
  			@Override
  			public void run() {
  				boolean isThreadNeeded = true;
  				long alreadyConsumed = 0;
  				while (isThreadNeeded) {
  					if (alreadyConsumed > period) {
  						long realConsumption = alreadyConsumed;
  						long missed = alreadyConsumed / period;
  						alreadyConsumed = alreadyConsumed % period;
  						log.warning("Too much time consumed in the last measuring ("
  								+ realConsumption
  								+ ">"
  								+ period
  								+ "), ignore the "
  								+ missed
  								+ " pushes missed and consider it has consumed "
  								+ alreadyConsumed);
  					} else {
  						// usual case.
  					}
  					try {
  						Thread.sleep(period - alreadyConsumed);
  					} catch (InterruptedException e) {
  						throw new JMetalException("Error in run method: ", e) ;
  					}
  
  					long measureStart = System.currentTimeMillis();
  
  					PullMeasure<Value> pull = weakPull.get();
  					SimplePushMeasure<Value> push = weakPush.get();
  					if (pull == null || push == null) {
  						isThreadNeeded = false;
  					} else {
  						Value value = pull.get();
  						if (value == lastValue || value != null
  								&& value.equals(lastValue)) {
  							// still the same, don't notify
  						} else {
  							lastValue = value;
  							push.push(value);
  						}
  					}
  					pull = null;
  					push = null;
  
  					long measureEnd = System.currentTimeMillis();
  					alreadyConsumed = measureEnd - measureStart;
  				}
  			}
  		});
  		thread.setDaemon(true);
  		thread.start();
  		return push;
  	}