001    /*
002     * Licensed to the Apache Software Foundation (ASF) under one or more
003     * contributor license agreements.  See the NOTICE file distributed with
004     * this work for additional information regarding copyright ownership.
005     * The ASF licenses this file to You under the Apache License, Version 2.0
006     * (the "License"); you may not use this file except in compliance with
007     * the License.  You may obtain a copy of the License at
008     *
009     *      http://www.apache.org/licenses/LICENSE-2.0
010     *
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS,
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     * See the License for the specific language governing permissions and
015     * limitations under the License.
016     */
017    package org.apache.commons.math.stat.descriptive;
018    
019    import org.apache.commons.math.DimensionMismatchException;
020    import org.apache.commons.math.linear.RealMatrix;
021    
022    /**
023     * Implementation of
024     * {@link org.apache.commons.math.stat.descriptive.MultivariateSummaryStatistics} that
025     * is safe to use in a multithreaded environment.  Multiple threads can safely
026     * operate on a single instance without causing runtime exceptions due to race
027     * conditions.  In effect, this implementation makes modification and access
028     * methods atomic operations for a single instance.  That is to say, as one
029     * thread is computing a statistic from the instance, no other thread can modify
030     * the instance nor compute another statistic.
031     * @since 1.2
032     * @version $Revision: 811685 $ $Date: 2009-09-05 19:36:48 +0200 (sam. 05 sept. 2009) $
033     */
034    public class SynchronizedMultivariateSummaryStatistics
035      extends MultivariateSummaryStatistics {
036    
037        /** Serialization UID */
038        private static final long serialVersionUID = 7099834153347155363L;
039    
040        /**
041         * Construct a SynchronizedMultivariateSummaryStatistics instance
042         * @param k dimension of the data
043         * @param isCovarianceBiasCorrected if true, the unbiased sample
044         * covariance is computed, otherwise the biased population covariance
045         * is computed
046         */
047        public SynchronizedMultivariateSummaryStatistics(int k, boolean isCovarianceBiasCorrected) {
048            super(k, isCovarianceBiasCorrected);
049        }
050    
051        /**
052         * {@inheritDoc}
053         */
054        @Override
055        public synchronized void addValue(double[] value)
056          throws DimensionMismatchException {
057          super.addValue(value);
058        }
059    
060        /**
061         * {@inheritDoc}
062         */
063        @Override
064        public synchronized int getDimension() {
065            return super.getDimension();
066        }
067    
068        /**
069         * {@inheritDoc}
070         */
071        @Override
072        public synchronized long getN() {
073            return super.getN();
074        }
075    
076        /**
077         * {@inheritDoc}
078         */
079        @Override
080        public synchronized double[] getSum() {
081            return super.getSum();
082        }
083    
084        /**
085         * {@inheritDoc}
086         */
087        @Override
088        public synchronized double[] getSumSq() {
089            return super.getSumSq();
090        }
091    
092        /**
093         * {@inheritDoc}
094         */
095        @Override
096        public synchronized double[] getSumLog() {
097            return super.getSumLog();
098        }
099    
100        /**
101         * {@inheritDoc}
102         */
103        @Override
104        public synchronized double[] getMean() {
105            return super.getMean();
106        }
107    
108        /**
109         * {@inheritDoc}
110         */
111        @Override
112        public synchronized double[] getStandardDeviation() {
113            return super.getStandardDeviation();
114        }
115    
116        /**
117         * {@inheritDoc}
118         */
119        @Override
120        public synchronized RealMatrix getCovariance() {
121            return super.getCovariance();
122        }
123    
124        /**
125         * {@inheritDoc}
126         */
127        @Override
128        public synchronized double[] getMax() {
129            return super.getMax();
130        }
131    
132        /**
133         * {@inheritDoc}
134         */
135        @Override
136        public synchronized double[] getMin() {
137            return super.getMin();
138        }
139    
140        /**
141         * {@inheritDoc}
142         */
143        @Override
144        public synchronized double[] getGeometricMean() {
145            return super.getGeometricMean();
146        }
147    
148        /**
149         * {@inheritDoc}
150         */
151        @Override
152        public synchronized String toString() {
153            return super.toString();
154        }
155    
156        /**
157         * {@inheritDoc}
158         */
159        @Override
160        public synchronized void clear() {
161            super.clear();
162        }
163    
164        /**
165         * {@inheritDoc}
166         */
167        @Override
168        public synchronized boolean equals(Object object) {
169            return super.equals(object);
170        }
171    
172        /**
173         * {@inheritDoc}
174         */
175        @Override
176        public synchronized int hashCode() {
177            return super.hashCode();
178        }
179    
180        /**
181         * {@inheritDoc}
182         */
183        @Override
184        public synchronized StorelessUnivariateStatistic[] getSumImpl() {
185            return super.getSumImpl();
186        }
187    
188        /**
189         * {@inheritDoc}
190         */
191        @Override
192        public synchronized void setSumImpl(StorelessUnivariateStatistic[] sumImpl)
193          throws DimensionMismatchException {
194            super.setSumImpl(sumImpl);
195        }
196    
197        /**
198         * {@inheritDoc}
199         */
200        @Override
201        public synchronized StorelessUnivariateStatistic[] getSumsqImpl() {
202            return super.getSumsqImpl();
203        }
204    
205        /**
206         * {@inheritDoc}
207         */
208        @Override
209        public synchronized void setSumsqImpl(StorelessUnivariateStatistic[] sumsqImpl)
210          throws DimensionMismatchException {
211            super.setSumsqImpl(sumsqImpl);
212        }
213    
214        /**
215         * {@inheritDoc}
216         */
217        @Override
218        public synchronized StorelessUnivariateStatistic[] getMinImpl() {
219            return super.getMinImpl();
220        }
221    
222        /**
223         * {@inheritDoc}
224         */
225        @Override
226        public synchronized void setMinImpl(StorelessUnivariateStatistic[] minImpl)
227          throws DimensionMismatchException {
228            super.setMinImpl(minImpl);
229        }
230    
231        /**
232         * {@inheritDoc}
233         */
234        @Override
235        public synchronized StorelessUnivariateStatistic[] getMaxImpl() {
236            return super.getMaxImpl();
237        }
238    
239        /**
240         * {@inheritDoc}
241         */
242        @Override
243        public synchronized void setMaxImpl(StorelessUnivariateStatistic[] maxImpl)
244          throws DimensionMismatchException {
245            super.setMaxImpl(maxImpl);
246        }
247    
248        /**
249         * {@inheritDoc}
250         */
251        @Override
252        public synchronized StorelessUnivariateStatistic[] getSumLogImpl() {
253            return super.getSumLogImpl();
254        }
255    
256        /**
257         * {@inheritDoc}
258         */
259        @Override
260        public synchronized void setSumLogImpl(StorelessUnivariateStatistic[] sumLogImpl)
261          throws DimensionMismatchException {
262            super.setSumLogImpl(sumLogImpl);
263        }
264    
265        /**
266         * {@inheritDoc}
267         */
268        @Override
269        public synchronized StorelessUnivariateStatistic[] getGeoMeanImpl() {
270            return super.getGeoMeanImpl();
271        }
272    
273        /**
274         * {@inheritDoc}
275         */
276        @Override
277        public synchronized void setGeoMeanImpl(StorelessUnivariateStatistic[] geoMeanImpl)
278          throws DimensionMismatchException {
279            super.setGeoMeanImpl(geoMeanImpl);
280        }
281    
282        /**
283         * {@inheritDoc}
284         */
285        @Override
286        public synchronized StorelessUnivariateStatistic[] getMeanImpl() {
287            return super.getMeanImpl();
288        }
289    
290        /**
291         * {@inheritDoc}
292         */
293        @Override
294        public synchronized void setMeanImpl(StorelessUnivariateStatistic[] meanImpl)
295          throws DimensionMismatchException {
296            super.setMeanImpl(meanImpl);
297        }
298    
299    }