Являются ли члены объекта поточно-ориентированными, если я передаю один и тот же объект различным Callables, а затем ExecutorService? В моем примере классификатор имеет свойства данных обучения, тестовых данных и сети. Все они используются в методе call () класса Callable путем вызова методов классификатора. Один и тот же объект классификатора передается каждому Callable.
for (int i = 0; i < this.cvCount; i++)
{
classifier.setTrainingsData(getTrainingSet(i, testSize));
classifier.setTestData(getTestSet(i, testSize));
Callable<XVErrors> callable = new ClassifierCallable<Classifier>(classifier);
Future<XVErrors> t = this.executor.submit(callable);
this.results.add(t);
}
... в ClassifierCallable
public XVErrors call() throws Exception {
XVErrors xv = new XVErrors();
xv.addTrainingError(classifier.train());
xv.addTestError(classifier.test());
return xv;
}
У меня такое чувство, что мне нужно сделать глубокую копию объекта классификатора и передать его, потому что, когда я отлаживаю, например, Метод train () ошибка в сети после окончания обучения (разные tmp и tmp2).
public TrainingError train{...
do {
trainingAlgorithm.iteration();
epoch++;
double tmp = trainingAlgorithm.getError();
} while (tmp > trainingErrorThreshold);
double tmp2 = trainingAlgorithm.getError();
...
}