default Accumulator<T, ?, R> synced(final Object lock) {
		requireNonNull(lock);

		@SuppressWarnings("unchecked")
		final A self = (A)this;
		return this instanceof SynchronizedAccumulator
			? this
			: new SynchronizedAccumulator<>(self, lock);
	}
Returns a synchronized (thread-safe) accumulator backed by {@code this}
accumulator. The given {@code lock} is used as a synchronization object.

@param lock the <em>lock</em> used for synchronization
@return a synchronized (thread-safe) accumulator backed by {@code this}
	       accumulator
@throws NullPointerException if the given {@code lock} is {@code null}
jenetics/src/main/java/io/jenetics/util/Accumulator.java