/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.commons.math3.stat.descriptive;
import org.apache.commons.math3.exception.MathIllegalStateException;
import org.apache.commons.math3.exception.NullArgumentException;
import org.apache.commons.math3.util.MathUtils;
Implementation of SummaryStatistics
that is safe to use in a multithreaded environment. Multiple threads can safely operate on a single instance without causing runtime exceptions due to race conditions. In effect, this implementation makes modification and access methods atomic operations for a single instance. That is to say, as one thread is computing a statistic from the instance, no other thread can modify the instance nor compute another statistic. Since: 1.2
/**
* Implementation of
* {@link org.apache.commons.math3.stat.descriptive.SummaryStatistics} that
* is safe to use in a multithreaded environment. Multiple threads can safely
* operate on a single instance without causing runtime exceptions due to race
* conditions. In effect, this implementation makes modification and access
* methods atomic operations for a single instance. That is to say, as one
* thread is computing a statistic from the instance, no other thread can modify
* the instance nor compute another statistic.
*
* @since 1.2
*/
public class SynchronizedSummaryStatistics extends SummaryStatistics {
Serialization UID /** Serialization UID */
private static final long serialVersionUID = 1909861009042253704L;
Construct a SynchronizedSummaryStatistics instance
/**
* Construct a SynchronizedSummaryStatistics instance
*/
public SynchronizedSummaryStatistics() {
super();
}
A copy constructor. Creates a deep-copy of the original
. Params: - original – the
SynchronizedSummaryStatistics
instance to copy
Throws: - NullArgumentException – if original is null
/**
* A copy constructor. Creates a deep-copy of the {@code original}.
*
* @param original the {@code SynchronizedSummaryStatistics} instance to copy
* @throws NullArgumentException if original is null
*/
public SynchronizedSummaryStatistics(SynchronizedSummaryStatistics original)
throws NullArgumentException {
copy(original, this);
}
{@inheritDoc}
/**
* {@inheritDoc}
*/
@Override
public synchronized StatisticalSummary getSummary() {
return super.getSummary();
}
{@inheritDoc}
/**
* {@inheritDoc}
*/
@Override
public synchronized void addValue(double value) {
super.addValue(value);
}
{@inheritDoc}
/**
* {@inheritDoc}
*/
@Override
public synchronized long getN() {
return super.getN();
}
{@inheritDoc}
/**
* {@inheritDoc}
*/
@Override
public synchronized double getSum() {
return super.getSum();
}
{@inheritDoc}
/**
* {@inheritDoc}
*/
@Override
public synchronized double getSumsq() {
return super.getSumsq();
}
{@inheritDoc}
/**
* {@inheritDoc}
*/
@Override
public synchronized double getMean() {
return super.getMean();
}
{@inheritDoc}
/**
* {@inheritDoc}
*/
@Override
public synchronized double getStandardDeviation() {
return super.getStandardDeviation();
}
{@inheritDoc}
/**
* {@inheritDoc}
*/
@Override
public synchronized double getQuadraticMean() {
return super.getQuadraticMean();
}
{@inheritDoc}
/**
* {@inheritDoc}
*/
@Override
public synchronized double getVariance() {
return super.getVariance();
}
{@inheritDoc}
/**
* {@inheritDoc}
*/
@Override
public synchronized double getPopulationVariance() {
return super.getPopulationVariance();
}
{@inheritDoc}
/**
* {@inheritDoc}
*/
@Override
public synchronized double getMax() {
return super.getMax();
}
{@inheritDoc}
/**
* {@inheritDoc}
*/
@Override
public synchronized double getMin() {
return super.getMin();
}
{@inheritDoc}
/**
* {@inheritDoc}
*/
@Override
public synchronized double getGeometricMean() {
return super.getGeometricMean();
}
{@inheritDoc}
/**
* {@inheritDoc}
*/
@Override
public synchronized String toString() {
return super.toString();
}
{@inheritDoc}
/**
* {@inheritDoc}
*/
@Override
public synchronized void clear() {
super.clear();
}
{@inheritDoc}
/**
* {@inheritDoc}
*/
@Override
public synchronized boolean equals(Object object) {
return super.equals(object);
}
{@inheritDoc}
/**
* {@inheritDoc}
*/
@Override
public synchronized int hashCode() {
return super.hashCode();
}
{@inheritDoc}
/**
* {@inheritDoc}
*/
@Override
public synchronized StorelessUnivariateStatistic getSumImpl() {
return super.getSumImpl();
}
{@inheritDoc}
/**
* {@inheritDoc}
*/
@Override
public synchronized void setSumImpl(StorelessUnivariateStatistic sumImpl)
throws MathIllegalStateException {
super.setSumImpl(sumImpl);
}
{@inheritDoc}
/**
* {@inheritDoc}
*/
@Override
public synchronized StorelessUnivariateStatistic getSumsqImpl() {
return super.getSumsqImpl();
}
{@inheritDoc}
/**
* {@inheritDoc}
*/
@Override
public synchronized void setSumsqImpl(StorelessUnivariateStatistic sumsqImpl)
throws MathIllegalStateException {
super.setSumsqImpl(sumsqImpl);
}
{@inheritDoc}
/**
* {@inheritDoc}
*/
@Override
public synchronized StorelessUnivariateStatistic getMinImpl() {
return super.getMinImpl();
}
{@inheritDoc}
/**
* {@inheritDoc}
*/
@Override
public synchronized void setMinImpl(StorelessUnivariateStatistic minImpl)
throws MathIllegalStateException {
super.setMinImpl(minImpl);
}
{@inheritDoc}
/**
* {@inheritDoc}
*/
@Override
public synchronized StorelessUnivariateStatistic getMaxImpl() {
return super.getMaxImpl();
}
{@inheritDoc}
/**
* {@inheritDoc}
*/
@Override
public synchronized void setMaxImpl(StorelessUnivariateStatistic maxImpl)
throws MathIllegalStateException {
super.setMaxImpl(maxImpl);
}
{@inheritDoc}
/**
* {@inheritDoc}
*/
@Override
public synchronized StorelessUnivariateStatistic getSumLogImpl() {
return super.getSumLogImpl();
}
{@inheritDoc}
/**
* {@inheritDoc}
*/
@Override
public synchronized void setSumLogImpl(StorelessUnivariateStatistic sumLogImpl)
throws MathIllegalStateException {
super.setSumLogImpl(sumLogImpl);
}
{@inheritDoc}
/**
* {@inheritDoc}
*/
@Override
public synchronized StorelessUnivariateStatistic getGeoMeanImpl() {
return super.getGeoMeanImpl();
}
{@inheritDoc}
/**
* {@inheritDoc}
*/
@Override
public synchronized void setGeoMeanImpl(StorelessUnivariateStatistic geoMeanImpl)
throws MathIllegalStateException {
super.setGeoMeanImpl(geoMeanImpl);
}
{@inheritDoc}
/**
* {@inheritDoc}
*/
@Override
public synchronized StorelessUnivariateStatistic getMeanImpl() {
return super.getMeanImpl();
}
{@inheritDoc}
/**
* {@inheritDoc}
*/
@Override
public synchronized void setMeanImpl(StorelessUnivariateStatistic meanImpl)
throws MathIllegalStateException {
super.setMeanImpl(meanImpl);
}
{@inheritDoc}
/**
* {@inheritDoc}
*/
@Override
public synchronized StorelessUnivariateStatistic getVarianceImpl() {
return super.getVarianceImpl();
}
{@inheritDoc}
/**
* {@inheritDoc}
*/
@Override
public synchronized void setVarianceImpl(StorelessUnivariateStatistic varianceImpl)
throws MathIllegalStateException {
super.setVarianceImpl(varianceImpl);
}
Returns a copy of this SynchronizedSummaryStatistics instance with the
same internal state.
Returns: a copy of this
/**
* Returns a copy of this SynchronizedSummaryStatistics instance with the
* same internal state.
*
* @return a copy of this
*/
@Override
public synchronized SynchronizedSummaryStatistics copy() {
SynchronizedSummaryStatistics result =
new SynchronizedSummaryStatistics();
// No try-catch or advertised exception because arguments are guaranteed non-null
copy(this, result);
return result;
}
Copies source to dest.
Neither source nor dest can be null.
Acquires synchronization lock on source, then dest before copying.
Params: - source – SynchronizedSummaryStatistics to copy
- dest – SynchronizedSummaryStatistics to copy to
Throws: - NullArgumentException – if either source or dest is null
/**
* Copies source to dest.
* <p>Neither source nor dest can be null.</p>
* <p>Acquires synchronization lock on source, then dest before copying.</p>
*
* @param source SynchronizedSummaryStatistics to copy
* @param dest SynchronizedSummaryStatistics to copy to
* @throws NullArgumentException if either source or dest is null
*/
public static void copy(SynchronizedSummaryStatistics source,
SynchronizedSummaryStatistics dest)
throws NullArgumentException {
MathUtils.checkNotNull(source);
MathUtils.checkNotNull(dest);
synchronized (source) {
synchronized (dest) {
SummaryStatistics.copy(source, dest);
}
}
}
}